Sql server 2005 SQL 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
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个子列?问题甚至不在于它是否能在屏幕上显示,而在于它是否能轻松地使用具有如此多列的网格。但是,你应该更清楚。在不知道更多细节的情况下,我可能夸大了这个问题。