我很难绕过如何将我需要的结果从CTE转换为Pivot。我有一个包含以下字段的表:
ReadingDescription Varchar(50)
ReadingDate datetime
ReadingValue int
数据看起来像这样:
MinDemand 1-1-2012 250
MaxDemand 1-1-2012 300
MinDemand 1-2-2012 260
MaxDemand 1-2-2012 310
MinDemand 1-3-2012 250
MaxDemand 1-3-2012 300
MinDemand 1-4-2012 260
MaxDemand 1-4-2012 310
我需要一个看起来像这样的输出:
ReadingDate MinDemand MaxDemand AvgDemand
1-1-2012 250 300 275
1-2-2012 260 310 285
1-2-2012 250 300 275
1-2-2012 260 310 285
我一直在研究,我认为我很接近,但无法超越CTE部分。以下是我到目前为止的情况:
with cte as (
SELECT
CONVERT(DATE,h.ReadingDate,1) as ReadingDate,
left(ReadingDescription,11) as Reading,
h.ReadingValue
FROM
FAC_WeeklyReadings wr
JOIN
FAC_WeeklyReadingsHistory h ON h.WeeklyReadingID = wr.WeeklyReadingID
where
wr.WeeklyReadingID in (149,150)
AND
h.ReadingDate BETWEEN '1-1-2012' AND '12-31-2012'
)
pivot(
--I have tried several things here but have not been successful
--
) p
答案 0 :(得分:2)
试试这个:
with cte as (
SELECT
CONVERT(DATE,h.ReadingDate,1) as ReadingDate,
left(ReadingDescription,11) as Reading,
h.ReadingValue
FROM
FAC_WeeklyReadings wr
JOIN
FAC_WeeklyReadingsHistory h ON h.WeeklyReadingID = wr.WeeklyReadingID
where
wr.WeeklyReadingID in (149,150)
AND
h.ReadingDate BETWEEN '1-1-2012' AND '12-31-2012'
)
SELECT *, (MinDemand+MaxDemand)/2 AvgDemand
FROM CTE T
PIVOT(MIN(ReadingValue) FOR Reading IN ([MinDemand],[MaxDemand])) AS PT
答案 1 :(得分:1)
select ReadingDate, min(ReadingValue), max(ReadingValue), avg(ReadingValue)
from FAC_WeeklyReadings wr JOIN FAC_WeeklyReadingsHistory h
ON h.WeeklyReadingID = wr.WeeklyReadingID
where wr.WeeklyReadingID in (149,150)
AND h.ReadingDate BETWEEN '1-1-2012' AND '12-31-2012'
group by h.ReadingDate