菜鸟SQL 透视查询

Newbie SQL Pivot query

长期听众,第一次来电...

我有一个 table(跟踪器),如下所示:

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    

...其中第 10、20、30 和 110A 列中的数字是每个 activity.

的 'GOOD' 的计数

我可以通过以下代码完成大部分工作;

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;

但是,每个工作订单我得到多行,结果分布在每个 activity 的一行中,如下所示:

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 

提前致谢!

对于 pivotFROM 子句中的额外列会导致额外的行。所以你需要小心你 select:

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;

这种行为是我更喜欢条件聚合的原因之一。