【发布时间】:2019-11-13 00:44:59
【问题描述】:
想象一下我有这些表
工单:
[Id], [ServiceId], [StatusId]
服务
[Id], [SName], [SCode], [SDnaCode], [SerivceParentId:Nullable]
状态
[Id], [StName], [StCode]
现在我如何获得这样的数据透视表结果:
|StName |RootService_1|RootService_2|...
+---------+-------------+-------------+----
|Initiated|23 |12 |...
|Closed |8 |5 |...
请记住,计数是针对根服务的,每个根服务都有自己的层次结构
[Service] 表中的示例记录
|ID|SName |SCode|SDnaCode|SerivceParentId|
+--+-------------+-----+--------+---------------+
| 1|RootService_1|RS01 |RS01 |NULL |
| 2|RS01_Child_1 |C01 |RS01.C01|1 |
| 3|RS01_Child_2 |C02 |RS01.C02|1 |
| 4|RootService_2|RS02 |RS02 |NULL |
| 5|RS02_Child_1 |C01 |RS02.C01|2 |
| 6|RS02_Child_2 |C02 |RS02.C02|2 |
因此,RootService_1 下示例数据透视表中的数字 23 是 Initiated WorkOrders 的计数,其中 ServiceId 组合为 1,2 或 3
请记住,我想将其包装在动态 SQL 中,以便为数据透视表 for clause 生成值。
希望我能很好地解释我的问题,提前谢谢
【问题讨论】:
标签: sql sql-server pivot pivot-table dynamic-sql