[英]Pivoting but handling Column Names
I'm currently getting a result-set back as follows:我目前得到的结果集如下:
What I'm trying to do is get the results to appear as follows:我想要做的是让结果显示如下:
I've put together the following query, and I was curious as to whether someone had a better way of doing it:我整理了以下查询,我很好奇是否有人有更好的方法:
select distinct
t1.Area,
t2.MedianCurrentYear,
t2.MedianPreviouYear,
t2.Difference,
t3.MedianCurrentYear,
t3.MedianPreviouYear,
t3.Difference,
t4.MedianCurrentYear,
t4.MedianPreviouYear,
t4.Difference
from #temp as t1
left join #temp as t2 on t1.Area = T2.Area and T2.NumberOfBedrooms = 2
left join #temp as t3 on t1.Area = T3.Area and T3.NumberOfBedrooms = 3
left join #temp as t4 on t1.Area = T4.Area and T4.NumberOfBedrooms = 4
Here's the sample data:这是示例数据:
Create Table #temp
(
Area varchar(50),
NumberOfBedrooms int,
MedianCurrentYear money,
MedianPreviouYear money,
Difference money
)
insert into #temp
(
Area,
NumberOfBedrooms,
MedianCurrentYear,
MedianPreviouYear,
Difference
)
select
'Area1',
2,
370,
365,
5
union all
select
'Area1',
3,
406,
408,
-2
union all
select
'Area1',
4,
520,
520,
0
union all
select
'Area2',
2,
300,
280,
20
union all
select
'Area2',
3,
406,
408,
-2
union all
select
'Area2',
4,
520,
520,
0
You can use conditional aggregation.您可以使用条件聚合。 That is, aggregate functions wrapped around
CASE
expressions.也就是说,聚合函数包裹在
CASE
表达式中。
For example...例如...
SELECT
Area,
MAX(CASE WHEN NumberOfBedrooms = 2 THEN MedianCurrentYear END) AS MedianCurrentYear_2Bedroom,
MAX(CASE WHEN NumberOfBedrooms = 3 THEN MedianCurrentYear END) AS MedianCurrentYear_3Bedroom,
MAX(CASE WHEN NumberOfBedrooms = 4 THEN MedianCurrentYear END) AS MedianCurrentYear_4Bedroom,
MAX(CASE WHEN NumberOfBedrooms = 2 THEN MedianPreviouYear END) AS MedianPreviouYear_2Bedroom,
MAX(CASE WHEN NumberOfBedrooms = 3 THEN MedianPreviouYear END) AS MedianPreviouYear_3Bedroom,
MAX(CASE WHEN NumberOfBedrooms = 4 THEN MedianPreviouYear END) AS MedianPreviouYear_4Bedroom,
MAX(CASE WHEN NumberOfBedrooms = 2 THEN Difference END) AS Difference_2Bedroom,
MAX(CASE WHEN NumberOfBedrooms = 3 THEN Difference END) AS Difference_3Bedroom,
MAX(CASE WHEN NumberOfBedrooms = 4 THEN Difference END) AS Difference_4Bedroom
FROM
#temp
GROUP BY
Area
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.