0

我很难思考如何将我需要的结果从 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
4

2 回答 2

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
于 2013-01-25T19:43:58.787 回答
1

为什么要支点?只是goup更容易吗?

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
于 2013-01-25T20:03:23.780 回答