Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Brauche Unterstützung bei weiteren Spalten in einer Ansicht

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Tekila, 16 August 2013.

  1. Tekila

    Tekila Neuer Benutzer

    Hallo Forum-User,

    ich benötige für eine SQL Ansicht eure Hilfe, da ich selbst nur SQL Anfängerkenntnisse habe.
    Es ist mein erster Eintrag hier, falls ich hier noch weitere Infos nenne soll, sagt mir bitte Bescheid.

    Es geht um eine Korrektur-Berechnung die für eine Mengenmeldung pro Standort errechnet werden soll.

    Die beiden Tabellen aus denen die Daten kommen sind:
    1. t_I_AT mit 4 Spalten:
    JahrMonatTag --> 20130101, 20130102 ...,
    WTag ---> Mo, Di, Mi ....,
    Plan-Tag --> 0 und 1,
    ProfitCenter --> 5stellige Nummer

    2. t_I_TMELD mit 4 Spalten:
    JahrMonatTag (siehe oben)
    Scanart --> 1,2,5,...
    ProfitCenter --> 5stellige Nummer
    Ist-Wert --> Mengenwert

    In der Ansicht die ich definieren soll hab ich bis jetzt 6 Spalten (ein Kollege hat mir schon etwas geholfen):
    Tag, Anzahl_Tage, profitcenter, scanart, Ist_Wert, Schnitt --> (weitere Infos im gleich folgenden Code)

    Code:
    USE [DPD Reporting dev]
    GO
    /****** Objekt:  View [dbo].[v_P_TM_Korrektur]    Skriptdatum: 08/16/2013 13:44:51 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
     
    ALTER VIEW [dbo].[v_P_TM_Korrektur]
    AS
     
    SELECT
            case when at.wtag = 'Sa' then 'Fr'else
                case when at.wtag = 'So' then 'Fr' else
                    at.wtag
            end end Tag
            ,count(at.wtag) Anzahl_Tage
            ,tm.profitcenter
            ,tm.scanart
            ,sum(tm.[IST-Wert]) Ist_Wert
            ,sum(tm.[IST-Wert])/count(at.wtag) Schnitt
       
           
    FROM [t_I_TMELD] as TM
     
    left outer join t_I_AT as AT on tm.[JahrMonatTag] = at.[JahrMonatTag] and tm.profitcenter = at.profitcenter
     
    where at.[plan-tag] = 1 and tm.[Scanart]=5 --or tm.[Scanart]=1
     
    group by at.wtag, tm.profitcenter, tm.scanart


    Ziel der Ansicht ist es das ich 2 weitere Spalten noch in der Ansicht haben will:

    Spalte 7 (Gesamtmenge): Soll die Summe aus aus den Ist_Wert Mengen für die 5 Tage (Mo bis Fr) sein (für das jeweilige profitcenter und die scanart)
    Spalte 8 (Anteil des Tages an Gesamtmenge): Ergebnis aus Spalte 6 geteilt durch Spalte 7 (in Prozent)
    Spalte 9 (Korrekturfaktor): soll folgenden Wert errechnen =(1+(1/5-Spalte 8))

    Diesen Korrekturfaktor will ich dann für weitere Berechnungen unserer Mengenmeldung verwenden (dies würde in einem Datenwürfel passieren).

    Könnt ihr mir hierbei helfen?:)
    Vielen Dank schon mal.
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Bitte verwende Code-Blöcke zum formatieren, wie das geht steht in der Hilfe.

    Für die Spalte 7: ich weiß nicht, ob M$SQL sowas kann wie sum(...) over (partition by ...), in der sum() summierst Du, was zu summieren ist und in partition by verwendest Du Deinen Wochentag. Dieser ist übrigens so in der Form redundant, da man ihn aus dem Datum berechnen kann.

    Der Rest ist ja eher trivial ...
     
  3. Tekila

    Tekila Neuer Benutzer

    Hallo akretschmer, vielen Dank für ihre schnelle Antwort.
    Die Codeblöcke für die beiden Ausgangstabellen sind:
    Code:
    /****** Objekt:  Table [dbo].[t_I_AT]    Skriptdatum: 08/16/2013 15:29:09 ******/
     
    CREATE TABLE [dbo].[t_I_AT](
        [JahrMonatTag] [int] NULL,
        [WTag] [char](2) NULL,
        [Plan-Tag] [int] NULL,
        [ProfitCenter] [char](5) NULL
    ) ON [PRIMARY]
     
    
    Code:
    CREATE TABLE [dbo].[t_I_TMELD](
        [JahrMonatTag] [int] NULL,
        [Scanart] [nvarchar](50) NULL,
        [ProfitCenter] [char](5) NULL,
        [IST-Wert] [decimal](38, 0) NULL
    ) ON [PRIMARY]
    Spalte 7 ist es wo ich auch hänge, die anderen 2 Spalten sollte ich dann hinbekommen.
     
  4. akretschmer

    akretschmer Datenbank-Guru


    Also, ich weiß nicht, ob SQLServer die Syntax kann, da gibt es sicherlich Unterschiede. Ich hab vereinfach Deine Tabellen nachgebaut:

    Code:
    test=*# select * from t1;
      datum    | plan_tag | profit_center
    ------------+----------+---------------
    2013-08-16 | t        | 12345
    2013-08-15 | t        | 12345
    2013-08-14 | t        | 12345
    2013-08-09 | t        | 12345
    (4 rows)
     
    test=*# select * from t2;
      datum    | scanart | profit_center | ist_wert
    ------------+---------+---------------+----------
    2013-08-16 |      1 | 12345        |        4
    2013-08-15 |      1 | 12345        |        4
    2013-08-14 |      1 | 12345        |      14
    2013-08-09 |      1 | 12345        |      11
    (4 rows)
    
    Es fehlt die Spalte wtag, aber die ist berechenbar, daher ein view:

    Code:
    test=*# \d+ t1v
                              View "public.t1v"
        Column    |      Type      | Modifiers | Storage  | Description
    ---------------+------------------+-----------+----------+-------------
    datum        | date            |          | plain    |
    wtag          | double precision |          | plain    |
    plan_tag      | boolean          |          | plain    |
    profit_center | text            |          | extended |
    View definition:
    SELECT t1.datum, date_part('dow'::text, t1.datum) AS wtag, t1.plan_tag,
        t1.profit_center
      FROM t1;
     
    test=*# select * from t1v;
      datum    | wtag | plan_tag | profit_center
    ------------+------+----------+---------------
    2013-08-16 |    5 | t        | 12345
    2013-08-15 |    4 | t        | 12345
    2013-08-14 |    3 | t        | 12345
    2013-08-09 |    5 | t        | 12345
    (4 rows)
    
    Du willst nun für alle Wochentage die Summe aus der t2.ist_wert:

    Code:
    test=*# select wtag, sum(ist_wert) from t1v left join t2 using(datum) group by wtag;
    wtag | sum
    ------+-----
        5 |  15
        3 |  14
        4 |  4
    (3 rows)
    
    Das mit der window-Funktion und dem partition by, was ich erst schrieb, ist quatsch, brauchst hier gar nicht.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden