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)...
有可能吗?专家请帮忙...提前致谢。
答案 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