0

CTE からピボットに必要な結果を取得する方法に頭を悩ませています。次のフィールドを持つテーブルがあります。

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

なぜピボット?ただ立ち上がるのは簡単ではないですか?

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 に答える