-1

SQL Server で列を週名で効率的に変換する方法を探しています。

これは私の例です:

Id  Value   ondate
1   10      06/05/2013      
2   9       07/05/2013      
3   5       08/05/2013      
4   89      09/05/2013      
5   8       10/05/2013  

シナリオ #1:

  • 開始日 : 2013 年 6 月 5 日 (月曜日)
  • 終了日 : 2013/05/14 (木)

これは私の結果です:

       mo   tu  we  th  fr  sa  su
row1   10   9   5   89  8   23  3
row2    5   8

シナリオ #2:

  • 開始日 : 2013 年 6 月 5 日 (月曜日)
  • 終了日 : 2013/07/05 (木)

これは私の望ましい結果です:

        mo   tu
row1    10    9

どうすれば結果を構築できますか?

4

2 に答える 2

0

を使用してこれを試してくださいPIVOT:-

Declare @startDate datetime,@endDate datetime
Set @startDate = '05/06/2013' 
Set @endDate = '05/14/2013'


Select  sum([Monday]) as Mo,sum([Tuesday]) as Tu,
        sum([wednesday]) as Wed,sum([Thursday]) as Th,sum([Friday]) as Fr,
        sum([Saturday]) as St,sum([Sunday]) as Su
from 
(
  Select value,datename(weekday,ondate) as dayName,ondate
  from @Sample 
  where ondate >= @startDate and ondate <= @endDate
)p
pivot
(
 min(value)
 for dayName in ([Monday],[Tuesday],[wednesday],[Thursday],[Friday],
                 [Saturday],[Sunday])
)pvt
group by datename(week,ondate)

開始日の出力: 2013 年 5 月 6 日 (月曜日) 終了日: 2013 年 5 月 14 日 (木曜日)

 ╔════╦══════╦══════╦══════╦══════╦══════╦══════╗
 ║ Mo ║  Tu  ║ Wed  ║  Th  ║  Fr  ║  St  ║  Su  ║
 ╠════╬══════╬══════╬══════╬══════╬══════╬══════╣
 ║ 10 ║ 9    ║ 5    ║ 89   ║ 8    ║ 23   ║ 3    ║
 ║ 12 ║ NULL ║ NULL ║ NULL ║ NULL ║ NULL ║ NULL ║
 ╚════╩══════╩══════╩══════╩══════╩══════╩══════╝

開始日の出力: 2013 年 5 月 6 日 (月曜日) 終了日: 2013 年 5 月 7 日 (木曜日)

 ╔════╦════╦══════╦══════╦══════╦══════╦══════╗
 ║ Mo ║ Tu ║ Wed  ║  Th  ║  Fr  ║  St  ║  Su  ║
 ╠════╬════╬══════╬══════╬══════╬══════╬══════╣
 ║ 10 ║  9 ║ NULL ║ NULL ║ NULL ║ NULL ║ NULL ║
 ╚════╩════╩══════╩══════╩══════╩══════╩══════╝

SQL FIDDLEでのデモ

于 2013-05-06T07:34:32.173 に答える