菜鸟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
提前致谢!
对于 pivot
,FROM
子句中的额外列会导致额外的行。所以你需要小心你 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;
这种行为是我更喜欢条件聚合的原因之一。
长期听众,第一次来电...
我有一个 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
提前致谢!
对于 pivot
,FROM
子句中的额外列会导致额外的行。所以你需要小心你 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;
这种行为是我更喜欢条件聚合的原因之一。