2017-10-15 37 views

回答

2

你可以這樣做:

SELECT Item, 
    SUM(CASE WHEN CAST(DateTimeCol AS Time) >= '08:00:00' AND CAST(DateTimeCol AS Time) < '10:00:00' THEN 1 ELSE 0 END) AS [8AM-10AM], 
    SUM(CASE WHEN CAST(DateTimeCol AS Time) >= '10:00:00' AND CAST(DateTimeCol AS Time) < '12:00:00' THEN 1 ELSE 0 END) AS [8AM-10AM], 
    SUM(CASE WHEN CAST(DateTimeCol AS Time) >= '12:00:00' AND CAST(DateTimeCol AS Time) < '14:00:00' THEN 1 ELSE 0 END) AS [10AM-12AM], 
    SUM(CASE WHEN CAST(DateTimeCol AS Time) >= '14:00:00' AND CAST(DateTimeCol AS Time) < '16:00:00' THEN 1 ELSE 0 END) AS [12PM-2PM], 
    SUM(CASE WHEN CAST(DateTimeCol AS Time) >= '16:00:00' THEN 1 ELSE 0 END)           AS [>4PM] 
FROM table1 
GROUP BY Item; 

抽查結果

| Item | 8AM-10AM | 10AM-12AM | 12PM-2PM | 2AM-4PM | >4PM | 
|--------|----------|-----------|----------|---------|------| 
| Item 1 |  2 |   4 |  1 |  0 | 0 | 
| Item 2 |  0 |   0 |  1 |  2 | 2 | 

更新:

您可以使用臨時表PIVOT表運營商所有的時間範圍爲:

SELECT * 
FROM 
(
    SELECT 
    Item, 
    Alias 
    FROM Table1 
    INNER JOIN Ranges ON CAST(DateTimeCol AS TIME) >= [Start] 
        AND CAST(DateTimeCol AS TIME) < [End] 
) AS t 
PIVOT 
(
    COUNT(Alias) 
    FOR Alias IN([8AM-10AM], [10AM-12AM], [12PM-2PM],[2PM-4PM], [>4PM]) 
) AS p; 
+1

@MartinSmith對不起這是'然後between'忘了解決它,謝謝 – 2017-10-15 17:51:08

+0

也'BETWEEN'是包容性的,所以你會被計算每小時10倍等,所以你9個例如行產生12結果 –

+0

@MartinSmith -Thanks一很多我現在修好了,但怎麼能這樣寫的'PIVOT'表運算符是posssible? – 2017-10-15 18:01:45

相關問題