长时间听众,第一次来电...
我有一张表(追踪器),如下所示:
ID | Works Order |Activity |Status
---|----------------|-----------|------
1 | W123456789-001 |10A |GOOD
2 | W123456789-002 |10A |GOOD
3 | W123456789-003 |10A |SCRAP
4 | W123456789-001 |20A |GOOD
5 | W123456789-002 |20A |GOOD
...工程订单号W123456789-001由实际工单号组成; W123456789,后面是部件号; 001.'Activites'固定为10A,20A,30A& 110A,状态为'GOOD'或'SCRAP'。我想总结一下&输出如下:
Works Order |10A |20A |30A |110A
-------------|----|----|----|----
W123456789 |2 |2 |0 |0
... col 10,20,30& 110A是每项活动的“好”的计数。
我可以使用以下代码获得大部分内容;
select [WO_Part],[10A G],[20A G],[30A G],[110AG]
from
(
select
[Activity],
LEFT([WOPart],10) AS [WO_Part],
iIf([Status]='GOOD ',1,0) AS [STATUS],
[ACTIVITY]+LEFT([STATUS],1) AS [CONCAT]
from Tracker
) d
pivot
(
SUM([Status])
for [CONCAT] in ([10A G],[20A G],[30A G],[110AG])
) piv;
但是,每个Works Order我得到多行,每个活动的结果分布在一行,如下所示:
Works Order |10A |20A |30A |110A
-------------|----|----|----|----
W123456789 |2 |0 |0 |0
W123456789 |0 |2 |0 |0
如何更改查询以便将结果合并到一行?
Works Order |10A |20A |30A |110A
-------------|----|----|----|----
W123456789 |2 |2 |0 |0
提前谢谢!
答案 0 :(得分:1)
使用pivot
,FROM
子句中的额外列会产生额外的行。因此,您需要注意选择的内容:
select [WO_Part], [20A G],[30A G],[110AG]
from (select LEFT([WOPart], 10) AS [WO_Part],
(case when [Status] = 'GOOD ' then 1 else 0 end) AS [STATUS],
[ACTIVITY]+LEFT([STATUS],1) AS [CONCAT]
from Tracker
) d
pivot (SUM([Status])
for [CONCAT] in ([20A G],[30A G],[110AG])
) piv;
这种行为是我更喜欢条件聚合的一个原因。