2016-07-06 21 views
3

Ich versuche eine neue Spalte hinzuzufügen, die den prozentualen Gesamtwert jedes einzelnen Pakettyps für diese Woche berechnet.Prozentsatz der Gesamtsumme der Gruppe

Der folgende Code ergibt Folgendes.

image

So möchte ich die neue Spalte den Prozentsatz der Gesamtzahl der hl für diese bestimmte Woche anzuzeigen.

Code:

SET DATEFIRST 1 

SELECT 

DATEPART (wk, t0.U_ORC_BE_ProdDate) AS [Week Produced], 
--Display week number of date produced 
(
CASE 
    WHEN t5.U_ORC_BE_NAME LIKE '%Cans%' 
     THEN 'Cans' 
    WHEN t5.U_ORC_BE_NAME LIKE '%Bottles%' 
     THEN 'Bottles' 
    WHEN t5.U_ORC_BE_NAME LIKE '%Key Keg%' 
     THEN 'Key Keg' 
    WHEN t5.U_ORC_BE_NAME LIKE '%SS Keg%' 
     THEN 'SS Keg' 
    WHEN t5.U_ORC_BE_NAME LIKE '%E-Keg%' 
     Then 'SS Keg' 
END 
)AS [Pack Type], 
--Collate item types to pack types 
sum(t5.U_ORC_BE_HECTOLITER * t0.CmpltQty) AS [Total Hectoliters] 
--Calculate total HL in the order 


FROM OWOR T0 
INNER JOIN OITT T1 ON T0.ItemCode = T1.Code 
INNER JOIN OITM T2 ON T1.Code = T2.ItemCode 
LEFT JOIN [@ORC_BE_PACK_TYPE] t5 ON t5.Code = t2.U_ORC_BE_PACK_TYPE 
LEFT JOIN [@ORC_BE_STYLE_H] t6 ON t6.Code= t2.U_ORC_BE_ShortCode 

WHERE 
    (t5.U_ORC_BE_HECTOLITER * t0.CmpltQty) != 0 
AND U_ORC_BE_ProcessType = 'Packaging' 
AND 
    (
    T0.[U_ORC_BE_ProdDate] >= dateadd(wk, datediff(wk, 0, getdate()) - 13, 0) 
    AND T0.[U_ORC_BE_ProdDate] < dateadd(wk, datediff(wk, 0, getdate()), 0) 
    ) 
--For previous 12 weeks 

GROUP BY datepart(wk, t0.U_ORC_BE_ProdDate), 

    t0.U_Operator, 
    (
    CASE 
     WHEN t5.U_ORC_BE_NAME LIKE '%Cans%' 
      THEN 'Cans' 
     WHEN t5.U_ORC_BE_NAME LIKE '%Bottles%' 
      THEN 'Bottles' 
     WHEN t5.U_ORC_BE_NAME LIKE '%Key Keg%' 
      THEN 'Key Keg' 
     WHEN t5.U_ORC_BE_NAME LIKE '%SS Keg%' 
      THEN 'SS Keg' 
     WHEN t5.U_ORC_BE_NAME LIKE '%E-Keg%' 
      Then 'SS Keg' 
    END 
    ) 

ORDER BY datepart (wk, t0.U_ORC_BE_ProdDate) ASC 

Antwort

1

Verwendung SUM() OVER(), um den vollen Betrag für jede Kalendereinheit zu aggregieren und die prozentuale Berechnung mit tun.

SELECT 
     d.* 
    , ([Total Hectoliters] * 100.0)/SUM([Total Hectoliters]) OVER (PARTITION BY [Week Produced]) [Weekly Pct] 
FROM (
     SELECT 
      DATEPART(wk, t0.U_ORC_BE_ProdDate)  AS [Week Produced] 
      --Display week number of date produced 
      , (
      CASE 
        WHEN t5.U_ORC_BE_NAME LIKE '%Cans%' THEN 'Cans' 
        WHEN t5.U_ORC_BE_NAME LIKE '%Bottles%' THEN 'Bottles' 
        WHEN t5.U_ORC_BE_NAME LIKE '%Key Keg%' THEN 'Key Keg' 
        WHEN t5.U_ORC_BE_NAME LIKE '%SS Keg%' THEN 'SS Keg' 
        WHEN t5.U_ORC_BE_NAME LIKE '%E-Keg%' THEN 'SS Keg' 
      END 
      )           AS [Pack Type] 
      --Collate item types to pack types 
      , SUM(t5.U_ORC_BE_HECTOLITER * t0.CmpltQty) AS [Total Hectoliters] 
     --Calculate total HL in the order 
     FROM OWOR T0 
      INNER JOIN OITT T1 ON T0.ItemCode = T1.Code 
      INNER JOIN OITM T2 ON T1.Code = T2.ItemCode 
      INNER JOIN [@ORC_BE_PACK_TYPE] t5 ON t5.Code = t2.U_ORC_BE_PACK_TYPE 
      LEFT JOIN [@ORC_BE_STYLE_H] t6 ON t6.Code = t2.U_ORC_BE_ShortCode 
     WHERE (t5.U_ORC_BE_HECTOLITER * t0.CmpltQty) <> 0 
      AND U_ORC_BE_ProcessType = 'Packaging' 
      --For previous 12 weeks 
      AND (T0.[U_ORC_BE_ProdDate] >= DATEADD(wk, DATEDIFF(wk, 0, GETDATE()) - 13, 0) 
      AND T0.[U_ORC_BE_ProdDate] < DATEADD(wk, DATEDIFF(wk, 0, GETDATE()), 0) 
      ) 
     GROUP BY 
      DATEPART(wk, t0.U_ORC_BE_ProdDate) 
      , t0.U_Operator 
      , (
      CASE 
        WHEN t5.U_ORC_BE_NAME LIKE '%Cans%' THEN 'Cans' 
        WHEN t5.U_ORC_BE_NAME LIKE '%Bottles%' THEN 'Bottles' 
        WHEN t5.U_ORC_BE_NAME LIKE '%Key Keg%' THEN 'Key Keg' 
        WHEN t5.U_ORC_BE_NAME LIKE '%SS Keg%' THEN 'SS Keg' 
        WHEN t5.U_ORC_BE_NAME LIKE '%E-Keg%' THEN 'SS Keg' 
      END 
      ) 
) AS d 
ORDER BY 
     [Week Produced] ASC 

Durch die Art und Weise, weil Ihre where-Klausel besteht darauf, dass alias t5 einige Bedingungen erfüllt es keinen Sinn, nach links in Verwendung auf t5 JOIN. Das heißt, da jede Zeile diese Bedingungen erfüllen muss, wird ein NULL-Ergebnis von t5 ignoriert, daher ist eine äußere Verknüpfung für diese Tabelle irrelevant.

+0

Ehrfürchtig. ich danke dir sehr. – coblenski

1

Wenn ich nur auf Ihre Tabelle screenshot schaute, schrieb ich diese Abfrage, ohne tief in die von Ihnen angegebene Abfrage zu gehen. Nicht sicher, das ist das Endergebnis, das Sie wollten. Wenn nicht, müssen Sie dies möglicherweise mit Ihrer Anfrage zusammenführen :)

+0

Danke, das ist ähnlich zu dem, was ich versuchte, aber ich konnte einfach nicht meinen Kopf darum wickeln. – coblenski

Verwandte Themen