5

以前に尋ねた質問と非常によく似たことをしようとしていますが、正しく動作しないようです。以前の質問は次のとおりです: 1 日あたりの合計を取得する方法

テーブルは次のようになります。

              Table Name: Totals
Date       |Program label   |count
           |                |    
2013-04-09 |Salary Day      |4364
2013-04-09 |Monthly         |6231
2013-04-09 |Policy          |3523
2013-04-09 |Worst Record    |1423
2013-04-10 |Salary Day      |9872
2013-04-10 |Monthly         |6543
2013-04-10 |Policy          |5324
2013-04-10 |Worst Record    |5432
2013-04-10 |Salary Day      |1245
2013-04-10 |Monthly         |6345
2013-04-10 |Policy          |5431
2013-04-10 |Worst Record    |5232

私の質問は次のとおりです: MSSQL 2008 の使用 - 当月の 1 日あたりのプログラム ラベルごとの合計数を取得する方法はありますか。ご覧のとおり、1 日に 2 回実行されることもあります。私はこれを説明できる必要があります。

出力は次のようになります。

Date      |Salary Day |Monthly |Policy |Worst Record
2013-04-9 |23456      |63241   |23521  |23524
2013-04-10|45321      |72535   |12435  |83612
4

3 に答える 3

8

次のように表演算子を使用しPIVOTます。

SELECT  *
FROM Totals AS t
PIVOT
(
   SUM(count)
   FOR [Program label] IN ([Salary Day], 
                           [Monthly], 
                           [Policy], 
                           [Worst Record])
) AS p;

実際に見てみましょう:

これにより、次のことが得られます。

|       DATE | SALARY DAY | MONTHLY | POLICY | WORST RECORD |
-------------------------------------------------------------
| 2013-04-09 |       4364 |    6231 |   3523 |         1423 |
| 2013-04-10 |      11117 |   12888 |  10755 |        10664 |
于 2013-07-04T07:52:16.780 に答える
3

これを試して

select Date,
  sum(case when [Program label] = 'Salary Day' then count else 0 end) [Salary Day],
  sum(case when [Program label] = 'Monthly' then count else 0 end) [Monthly],
  sum(case when [Program label] = 'Policy' then  count else 0 end) [Policy],
  sum(case when [Program label] = 'Worst Record' then count else 0 end) [Worst Record]
from Totals Group by [Date];
于 2013-07-04T07:59:08.700 に答える