Announcement

Collapse
No announcement yet.

Hinzufügen eines nicht existierenden Feldes zu einer View & Aufsummierung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hinzufügen eines nicht existierenden Feldes zu einer View & Aufsummierung

    Hallo und ein schönes neues Jahr!

    Das ist meine view:

    ---
    Code:
    SELECT T1.[DocDueDate], dbo.f_ISOweek(T1.[DocDueDate]) AS 'Woche', T1.[DocNum], T1.[CardCode] AS 'Kundennummer', T1.[CardName], T2.[ItemCode], T2.[Dscrption], T2.[Quantity], T2.[LineTotal]
    FROM OCRD TO INNER JOIN ORDR T1 ON T0.CardCode = T1.CardCode INNER JOIN RDR1 T2 ON T1.DocEntry = T2.DocEntry
    WHERE T1.[DocStatus] = 'O' AND T1.[DocDueDate] >= [%0] AND T1.[DocDueDate] <= [%1] ORDER BY T1.[DocDueDate], Woche
    ---

    Wenn ich diese ausführe, generiert sie die folgenden spalten:
    #, Fälligkeitsdatum, Woche, Belegnummer, Kundennummer, Kundenname, Artikelnummer, Artikelbeschreibung, Menge, Zeilensumme.

    Jetzt muss ich eine neue Stalte am Ende hinzufügen (also nach "Zeilensumme"), die Zeilensumme einer bestimmten Woche bestimmt. Z.B. Woche 1 hat 4 Zeilen, diese 4 Zeilen (also immer das Feld "Zeilensumme") sollen nun summiert in der neuen Spalte ausgegeben werden.

    Hat jemand eine Idee? Wie füge ich denn überhaupt ein neues Feld an eine view an?

    Danke schonmal, falls jemand helfen kann
    Zuletzt editiert von kahlchen; 06.01.2010, 22:24.

  • #2
    Originally posted by kahlchen View Post
    Jetzt muss ich eine neue Stalte am Ende hinzufügen (also nach "Zeilensumme"), die Zeilensumme einer bestimmten Woche bestimmt. Z.B. Woche 1 hat 4 Zeilen, diese 4 Zeilen (also immer das Feld "Zeilensumme") sollen nun summiert in der neuen Spalte ausgegeben werden.
    Bei MSSQL 2000: mit einem SubSelect, ungefähr so
    [HIGHLIGHT="SQL"]WochenSumme = (SELECT SUM (T2.[LineTotal])
    FROM ORDR AS TS1
    JOIN RDR1 TS2 ON T1.DocEntry
    WHERE TS1.[DocStatus] = 'O' AND TS1.[DocDueDate] >= [%0] AND TS1.[DocDueDate] <= [%1]
    AND dbo.f_ISOweek(TS1.[DocDueDate]) = dbo.f_ISOweek(T1.[DocDueDate]))
    GROUP BY dbo.f_ISOweek(TS1.[DocDueDate]) , TS1.[DocNum], TS1.[CardCode] ,
    TS1.[CardName], TS2.[ItemCode], TS2.[Dscrption], TS2.[Quantity]
    )[/HIGHLIGHT]
    ab MSSQL 2005:
    Code:
    SUM (T2.[LineTotal]) OVER (PARTITION BY (dbo.f_ISOweek(T1.[DocDueDate])
    Originally posted by kahlchen View Post
    Wie füge ich denn überhaupt ein neues Feld an eine view an?
    Code:
    ALTER VIEW <View_Name> as <Dein_neues_SQL>

    Comment


    • #3
      Hallo,
      vielen vielen Dank für die Antwort. Der MSSQL-Server ist ein 2005er oder neuer.
      Wie würde denn jetzt die gesamte neue view mit dem neuen Feld aussehen?

      so hier? (also einfach druntersetzen?)
      Code:
      SELECT T1.[DocDueDate], dbo.f_ISOweek(T1.[DocDueDate]) AS 'Woche', T1.[DocNum], T1.[CardCode] AS 'Kundennummer', T1.[CardName], T2.[ItemCode], T2.[Dscrption], T2.[Quantity], T2.[LineTotal]
      FROM OCRD TO INNER JOIN ORDR T1 ON T0.CardCode = T1.CardCode INNER JOIN RDR1 T2 ON T1.DocEntry = T2.DocEntry
      WHERE T1.[DocStatus] = 'O' AND T1.[DocDueDate] >= [%0] AND T1.[DocDueDate] <= [%1] ORDER BY T1.[DocDueDate], Woche
      SUM (T2.[LineTotal]) OVER (PARTITION BY (dbo.f_ISOweek(T1.[DocDueDate])
      Oder muss oben bei SELECT noch irgendwie ein Feld erstellt werden?
      (zur Erklärung: ich kann zwar SQL etwas, aber mit MSSQL-Server kenne ich mich gar nicht aus...)
      Also nochmal vielen vielen Dank, falls jemand helfen kann.
      Zuletzt editiert von kahlchen; 06.01.2010, 22:23.

      Comment


      • #4
        Originally posted by kahlchen View Post
        Hallo,
        vielen vielen Dank für die Antwort. Der MSSQL-Server ist ein 2005er oder neuer.
        Wie würde denn jetzt die gesamte neue view mit dem neuen Feld aussehen?

        Oder muss oben bei SELECT noch irgendwie ein Feld erstellt werden?
        (zur Erklärung: ich kann zwar SQL etwas, aber mit MSSQL-Server kenne ich mich gar nicht aus...).
        Nein, vor das FROM natürlich (darin unterscheidet sich MS-Sql nicht von anderen SQl-Dialekten)

        [Highlight=SQL]SELECT T1.[DocDueDate]
        , dbo.f_ISOweek(T1.[DocDueDate]) AS 'Woche'
        , T1.[DocNum]
        , T1.[CardCode] AS 'Kundennummer'
        , T1.[CardName]
        , T2.[ItemCode]
        , T2.[Dscrption]
        , T2.[Quantity]
        , T2.[LineTotal]
        , SUM (T2.[LineTotal]) OVER (PARTITION BY (dbo.f_ISOweek(T1.[DocDueDate])
        FROM OCRD AS t0
        JOIN ORDR AS T1 ON T0.CardCode = T1.CardCode
        JOIN RDR1 AS T2 ON T1.DocEntry
        WHERE T1.[DocStatus] = 'O' AND T1.[DocDueDate] >= [%0] AND T1.[DocDueDate] <= [%1]
        ORDER BY T1.[DocDueDate], Woche
        [/Highlight]

        PS:
        a) wozu gehts du über Tabelle OCRD , wenn nachher doch kein Feld davon gebracuht wird?
        b) wie wird der join zu RDR1 verknüpft?

        Comment


        • #5
          Originally posted by ebis View Post
          Nein, vor das FROM natürlich (darin unterscheidet sich MS-Sql nicht von anderen SQl-Dialekten)
          Stimmt, so machts auch Sinn.

          Originally posted by ebis View Post
          PS:
          a) wozu gehts du über Tabelle OCRD , wenn nachher doch kein Feld davon gebracuht wird?
          b) wie wird der join zu RDR1 verknüpft?
          a) Ich hab' keine Ahnung, hab' die View ja auch nur so vorgelegt bekommen. Aber keine Sorge, ich verweise den fragenden auf dieses Forum, bzw. diesen Thread und lege es nicht als meine Lösung aus.

          b) Du meinst diese Zeile hier, oder?
          Code:
          JOIN RDR1 AS T2 ON T1.DocEntry
          Da habe ich etwas vergessen und jetzt oben ergänzt. Es fehlt "= T2.DocEntry"

          Und noch eine Frage: Bei deiner Lösung, also die Zeile, die mit "SUM" beginnt, gehen 2 Klammern mehr auf als zu. Das kann doch so nicht stimmen, oder?

          Danke für die ganze Hilfe und viele Grüße.
          Zuletzt editiert von kahlchen; 06.01.2010, 22:33.

          Comment

          Working...
          X