透视多列sql server
Posted
技术标签:
【中文标题】透视多列sql server【英文标题】:Pivot multiple columns sql server 【发布时间】:2015-03-18 14:03:08 【问题描述】:我有一个存储的 proc / sql 返回数据表,如下所示:
today_date prev_date sales Company S itmgrp itemName sales
3/16/2015 3/13/2015 Online CompanyA S1 Personal P - D -3391.17
3/16/2015 3/13/2015 Online CompanyA S1 Home MIS - D 286.2294316
3/16/2015 3/13/2015 Online CompanyA S1 Home M L - D 240.3000802
3/16/2015 3/13/2015 Online CompanyA S1 Home P - D -313.0786364
3/16/2015 3/13/2015 Online CompanyA S1 Home M L - D -3096.968552
3/16/2015 3/13/2015 Online CompanyA S1 Home P L - D -5567.942955
3/16/2015 3/13/2015 Online CompanyA S2 Home PC -8770.911724
3/16/2015 3/13/2015 Online CompanyA S3 Personal PJ -808.36
3/16/2015 3/13/2015 Online CompanyA S3 Home PJ -42800.9843
3/16/2015 3/13/2015 Online CompanyA S3 Home PJ 1760.708018
3/16/2015 3/13/2015 Online CompanyA S4 Home PGF - D -59011.18629
3/16/2015 3/13/2015 Online CompanyA S1 Home P - D -560.2475234
如何使用 SQL Server 的 PIVOT 获得以下格式的数据透视结果:
行:公司/项目组/项目名称 值:总和(销售额)
CompanyA
Personal
P - D -3391.17
PJ -808.36
Home
P - D -873.3261597
MIS - D 286.2294316
M L - D -2856.668472
P L - D -5567.942955
PC -8770.911724
PJ -41040.27628
PGF - D -59011.18629
我可以获得 Company/itemgroup/itemName 的不同值
到目前为止,我看到的所有示例似乎都是单列枢轴。
【问题讨论】:
即使您进行了编辑,我也不清楚您希望如何返回数据。 【参考方案1】:您可以使用group by rollup
实现非常相似的功能,然后通过grouping_id()
进行过滤:
with x as (
select company, itmgrp, itemname, sum(sales_amt) as sales_amt, grouping_id(company) as company_gid, grouping_id(itmgrp) as itmgrp_gid, grouping_id(itemname) as itemname_gid
from #t
group by rollup(company, itmgrp, itemname)
)
select
case when itmgrp_gid = 1 then company else null end,
case when itemname_gid = 1 then itmgrp else null end,
itemname,
case when company_gid + itmgrp_gid + itemname_gid = 0 then sales_amt else null end
from x
where company_gid + itmgrp_gid + itemname_gid < 3
order by company, itmgrp, itemname, company_gid, itmgrp_gid, itemname_gid
【讨论】:
grouping_id 不是 SQL Server 2008 的函数。 @buffer_overflow:I wouldn't be so sure。无论如何,您要做的是演示文稿问题。 SQL Server 应该只为您提供数据,它是应该进行格式化的表示层。通常这是报告工具的工作。以上是关于透视多列sql server的主要内容,如果未能解决你的问题,请参考以下文章