2013-07-04 10 views
5

Próbuję zrobić coś bardzo podobnego do pytania, które zadawałem wcześniej, ale wydaje mi się, że nie działa poprawnie. Oto moje poprzednie pytanie: How to get totals per daySumy MSSQL dziennie za miesiąc

tabela wygląda następująco:

   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 

Moje pytanie brzmi: Korzystanie z MSSQL 2008 - Czy istnieje sposób dla mnie, aby uzyskać całkowitą liczbę za Label Programu na dzień dla obecny miesiąc. Jak widzisz, czasami będzie działać dwa razy dziennie. Muszę być w stanie to wyjaśnić.

Wyjście powinno wyglądać następująco:

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

Odpowiedz

3

Spróbuj

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]; 
+0

Użyłem twojej odpowiedzi, ponieważ jest to najprostsze, dla mnie, zrozumienie, mimo że musiałem bardzo dużo edytować. Dzięki. :) – DeanMWake

8

użyć operatora PIVOT tabela tak:

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

Zobacz go w akcji:

to daje:

|  DATE | SALARY DAY | MONTHLY | POLICY | WORST RECORD | 
------------------------------------------------------------- 
| 2013-04-09 |  4364 | 6231 | 3523 |   1423 | 
| 2013-04-10 |  11117 | 12888 | 10755 |  10664 | 
+0

Dzięki. Nauczyłem się czegoś nowego przez to :) Naprawdę pomocna odpowiedź. Nie zdecydowałem się na użycie go jako czegoś, z czego nie jestem jeszcze całkowicie zadowolony. Chociaż na pewno zacznę testować to z moimi przyszłymi pytaniami. – DeanMWake

+0

@MethodMan - Nie ma za co, cieszę się, że mógłbym pomóc :) –

2

Spróbuj ten -

SELECT 
    date 
    , [Salary Day] = SUM(CASE when [Program label] = 'Salary Day' then COUNT end) 
    , [Monthly] = SUM(CASE when [Program label] = 'Monthly' then COUNT end) 
    , [Policy] = SUM(CASE when [Program label] = 'Policy' then COUNT end) 
    , [Worst Record] = SUM(CASE when [Program label] = 'Worst Record' then COUNT end) 
FROM Totals 
GROUP BY [Date];