是否可以在sql pivot查询中具有多个where条件

时间:2014-07-10 06:41:54

标签: sql sql-server pivot

WITH Tablename(date, saletype, sales) AS
(
SELECT date1, sale_type, sales1 from tbl1 Where ...some conditions
UNION ALL
SELECT date2, saletype, sales2 from tbl2 Where ...some conditions
)
Select date from Tablename PIVOT (Sum(sales) FOR date in ([2013],[2014])) As Pvt

据我所知,这个查询带来了date,sales2013,sales2014 ......的输出,效果很好。

我想知道是否有办法在数据透视查询中有一个额外的条件 - 比如,我想 将sales2014分成两部分 -

1. sales2014 (saletype = 1). 
2. sales2014 (saletype = 2). 

因此,将所有sales2013记录列在一列中,在一列中列出sales2014(saletype1)并在单独的列中列出sales2014(saletype2) 因此,输出列将是

date, sales2014, sales2014(saletype1), sales2014(saletype2)...

有可能吗?专家请帮忙...提前致谢。

1 个答案:

答案 0 :(得分:2)

我认为您可以尝试以下查询。我们的想法是,由于您需要其他列,因此需要在主查询中将它们生成为行。要在主查询中生成它们,我使用了addtional UNION ALL

WITH Tablename(date, saletype, sales) AS
(
SELECT date1, sale_type, sales1 from tbl1 Where ...some conditions
UNION ALL
SELECT CAST(date1 AS VARCHAR(30)) + '(saletype' + CAST(sale_type AS VARCHAR(5)) + ')' , sale_type, sales1 from tbl1 Where  ...other conditions
UNION ALL
SELECT date2, saletype, sales2 from tbl2 Where ...some conditions
UNION ALL
SELECT CAST(date2 AS VARCHAR(30)) + '(saletype' + CAST(sale_type AS VARCHAR(5)) + ')' , sale_type, sales2 from tbl2 Where  ...other conditions

)
Select date from Tablename PIVOT (Sum(sales) FOR date in ([2013],[2013(saletype1)],[2013(saletype2)],[2014],[2014(saletype1)],[2014(saletype2)])) As Pvt