我有一个查询,最终用户希望某个位置的分配器总数-尽管已经按位置将分配器分组并且可以看到分配器的总数,但他们仍然想要该Count列。
这是查询,它求和每台机器在某个位置分配的加仑总数-
SELECT nt.COSTCENTER AS "CostCtr",
s.DAD AS "D.A.D.",
s.DIVISION AS "Division",
nt.DISPENSER AS "Model Name",
nt.SERIALNBR AS "Serial",
nt.CLRNTSYS AS "Sys",
SUM (CASE WHEN nt.CLRNTSYS ='CCE' THEN nt.GALLONS ELSE 0 END) AS "CCE gals",
SUM (CASE WHEN nt.CLRNTSYS ='BAC' THEN nt.GALLONS ELSE 0 END) AS "BAC gals"
FROM TableNT nt
JOIN TableSTORE s ON nt.COSTCENTER = s.COSTCENTER
WHERE nt.BOOKDATE >= '01-JAN-18' AND nt.BOOKDATE <= '31-AUG-18'
AND nt.CLRNTSYS IN ('CCE','BAC')
AND nt.TRANCODE = 'DISP'
AND nt.DISPENSER <> 'BYHAND'
GROUP BY nt.COSTCENTER, nt.DISPENSER, nt.TINTERSERIALNBR, nt.CLRNTSYS, s.DAD, s.DIVISION
ORDER BY nt.COSTCENTER, nt.DISPENSER;
大多数位置只有一个分配器。有些有两个或三个或四个。如果我做一个COUNT(DISTINCT nt.DISPENSER),那么每次都会返回“ 1”,因为每个记录都是每个分配器。有什么办法可以让我分配每个位置的分配器总数?例如,如果某个位置有三个分配器,那么该位置上每个分配器的记录在“分配器数量”列中是否会显示“ 3”?这样,如果他们只查看某个位置的一个分配器的一个特定记录,他们会知道该位置可用的分配器总数(如果有意义)?
附录-以下是我可能希望取得的结果的一个示例,最后是每个成本中心的点胶机数量。希望这可以澄清。
CostCtr|D.A.D. |Division|Model Name|Serial |Sys|CCE Gals|BAC Gals|Num Of Dsps
701003 01-06-02 01 IFC 8112NP ABCDE CCE 37616.75 0 1
701004 02-08-25 02 IFC 7012NP 12345 BAC 0 1164.75 2
701004 02-08-25 02 IFC 8112NP DEFGH CCE 41843 0 2
701005 01-03-38 01 IFC 411XN 67890 CCE 24847.75 0 1
701006 01-06-02 01 IFC 411XN IJKHL CCE 50511.5 0 3
701006 01-06-02 01 CB 800CE 23456 BAC 20 0 3
701006 01-06-02 01 CB 2000 MNOPQ CCE 110 0 3
这应该可以工作-看到count(*)加上“ over”。Google Analytics(分析)非常酷,仅针对此类查询而设计。这是@doeneth在评论中的建议。
SELECT nt.COSTCENTER AS "CostCtr"
,s.DAD AS "D.A.D."
,s.DIVISION AS "Division"
,nt.DISPENSER AS "Model Name"
,nt.SERIALNBR AS "Serial"
,nt.CLRNTSYS AS "Sys"
,SUM(CASE
WHEN nt.CLRNTSYS = 'CCE'
THEN nt.GALLONS
ELSE 0
END) AS "CCE gals"
,SUM(CASE
WHEN nt.CLRNTSYS = 'BAC'
THEN nt.GALLONS
ELSE 0
END) AS "BAC gals"
,count(*) OVER (PARTITION BY nt.COSTCENTER) AS "Num OF Dsps"
FROM TableNT nt
INNER JOIN TableSTORE s ON nt.COSTCENTER = s.COSTCENTER
WHERE nt.BOOKDATE >= '01-JAN-18'
AND nt.BOOKDATE <= '31-AUG-18'
AND nt.CLRNTSYS IN (
'CCE'
,'BAC'
)
AND nt.TRANCODE = 'DISP'
AND nt.DISPENSER <> 'BYHAND'
GROUP BY nt.COSTCENTER
,nt.DISPENSER
,nt.TINTERSERIALNBR
,nt.CLRNTSYS
,s.DAD
,s.DIVISION
ORDER BY nt.COSTCENTER
,nt.DISPENSER;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句