2013-07-04 35 views
5

Tôi đang cố gắng làm điều gì đó rất giống với câu hỏi tôi đã hỏi trước đây nhưng tôi không thể làm cho nó hoạt động chính xác. Dưới đây là câu hỏi trước đây của tôi: How to get totals per dayMSSQL Tổng số mỗi ngày trong một tháng

bàn trông như sau:

   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 

Câu hỏi của tôi là: Sử dụng MSSQL 2008 - Có cách nào cho tôi để có được tổng số lượng mỗi Label Chương trình mỗi ngày cho Tháng này. Như bạn có thể thấy đôi khi nó sẽ chạy hai lần một ngày. Tôi cần để có thể giải thích cho điều này.

Đầu ra nên trông như sau:

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

Trả lời

3

Hãy thử điều này

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

Tôi đã sử dụng câu trả lời của bạn vì nó đơn giản nhất, đối với tôi, để hiểu mặc dù tôi phải chỉnh sửa nó rất nhiều. Cảm ơn. :) – DeanMWake

8

Sử dụng các nhà điều hành PIVOT bảng như thế này:

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

Nhìn thấy nó trong hành động:

này sẽ cung cấp cho bạn:

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

Cảm ơn. Tôi đã học được một cái gì đó mới thông qua điều này :) Câu trả lời thực sự hữu ích. Tôi đã không chọn sử dụng nó như nó không phải là một cái gì đó tôi hoàn toàn thoải mái với được nêu ra. Mặc dù tôi chắc chắn sẽ bắt đầu thử nghiệm điều này với các truy vấn trong tương lai của tôi. – DeanMWake

+0

@MethodMan - Bạn được chào đón bất kỳ lúc nào, vui mừng tôi có thể giúp :) –

2

Hãy thử điều này một -

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]; 
Các vấn đề liên quan