Sql server 2005 SQL 2005中的交叉表查询或透视查询

Sql server 2005 SQL 2005中的交叉表查询或透视查询,sql-server-2005,Sql Server 2005,有人能帮我在SQL 2005中进行交叉表/透视查询吗 给定的数据看起来像 EmpId OrgId DayCt Cost 1 20 15 100 2 20 36 300 3 40 25 200 4 40 10 50 结果如下: EmpId OrgId 20 OrgId 40 DayCt Cost

有人能帮我在SQL 2005中进行交叉表/透视查询吗

给定的数据看起来像

EmpId   OrgId  DayCt  Cost

1       20     15     100

2       20     36     300

3       40     25     200

4       40     10     50
结果如下:

EmpId       OrgId 20          OrgId 40  

         DayCt  Cost          DayCt  Cost


1         15     100

2         36     300

3                             25     200

4                             10     50

第一列为EmpId,下一列为OrgId。但在每个OrgId下,我希望DayCt和Cost也包含在子列中。不确定这是否可行。请提供帮助。

没有子列这样的事情,这似乎应该在应用程序/报告工具中完成

这是在SQL中可以得到的最接近的值

;WITH T(EmpId,OrgId,DayCt,Cost) AS
(
select 1, 20,  15,  100 UNION ALL
select 2, 20,  36,  300 UNION ALL
select 3, 40,  25,  200 UNION ALL
select 4, 40,  10,  50
)
SELECT EmpId,
       MAX(CASE WHEN OrgId =20 THEN DayCt END) AS [OrgId 20 DayCt],
       MAX(CASE WHEN OrgId =20 THEN Cost END) AS [OrgId 20 Cost],
       MAX(CASE WHEN OrgId =40 THEN DayCt END) AS [OrgId 40 DayCt],
       MAX(CASE WHEN OrgId =40 THEN Cost END) AS [OrgId 40 Cost]
FROM T
GROUP BY EmpId
返回

EmpId       OrgId 20 DayCt OrgId 20 Cost OrgId 40 DayCt OrgId 40 Cost
----------- -------------- ------------- -------------- -------------
1           15             100           NULL           NULL
2           36             300           NULL           NULL
3           NULL           NULL          25             200
4           NULL           NULL          10             50

您能为示例数据提供所需的结果吗?谢谢快速查看。无论我做什么,但无法在这里获得格式。让我再试一次。若要像以前一样使用空格来布局表格,只需选择表格并点击工具栏中的
{}
图标,这样它就会被视为代码,而空格不会被折叠成一个。嘿,谢谢你的格式化提示。很抱歉,我没有100个OrgIds,这是否意味着我必须在查询中键入所有这些数据,以及DayCt和Cost的所有可能组合?@KIA-是的。没有SQL Server函数可以为您执行此操作。如果
OrgId
s不是静态的,那么您将需要动态SQL来生成上述内容(谷歌“动态透视”)@KIA:您将如何显示它们@马丁:+1,顺便说一句@KIA:是的,但是。。。100列?每个有2个子列?问题甚至不在于它是否能在屏幕上显示,而在于它是否能轻松地使用具有如此多列的网格。但是,你应该更清楚。在不知道更多细节的情况下,我可能夸大了这个问题。