我試圖創建一個返回以下結果集的查詢中的每一天(截斷可讀性):Oracle SQL。選擇在一天的所有小時全年
+---------------+-----------+--------+--------+----------+
| DATE_HAPPENED | Twelve_AM | One_AM | Two_AM | Three_AM | (and so on, until 24 hours)
+---------------+-----------+--------+--------+----------+
| 2015-10-01 | 110 | 34 | 92 | 45 |
+---------------+-----------+--------+--------+----------+
這是我使用的代碼(而我不知道它是做)的最佳方式:
SELECT to_char(potty_use_date, 'yyyy-mm-dd HH12') as date_happened,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 AM') = '12' THEN 1 ELSE 0 END) as Twelve_AM,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 AM') = '1' THEN 1 ELSE 0 END) as One_AM,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 AM') = '2' THEN 1 ELSE 0 END) as Two_AM,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 AM') = '3' THEN 1 ELSE 0 END) as Three_AM,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 AM') = '4' THEN 1 ELSE 0 END) as Four_AM,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 AM') = '5' THEN 1 ELSE 0 END) as Five_AM,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 AM') = '6' THEN 1 ELSE 0 END) as Six_AM,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 AM') = '7' THEN 1 ELSE 0 END) as Seven_AM,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 AM') = '8' THEN 1 ELSE 0 END) as Eight_AM,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 AM') = '9' THEN 1 ELSE 0 END) as Nine_AM,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 AM') = '10' THEN 1 ELSE 0 END) as Ten_AM,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 AM') = '11' THEN 1 ELSE 0 END) as Eleven_AM,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 PM') = '1' THEN 1 ELSE 0 END) as One_PM,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 PM') = '2' THEN 1 ELSE 0 END) as Two_PM,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 PM') = '3' THEN 1 ELSE 0 END) as Three_PM,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 PM') = '4' THEN 1 ELSE 0 END) as Four_PM,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 PM') = '5' THEN 1 ELSE 0 END) as Five_PM,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 PM') = '6' THEN 1 ELSE 0 END) as Six_PM,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 PM') = '7' THEN 1 ELSE 0 END) as Seven_PM,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 PM') = '8' THEN 1 ELSE 0 END) as Eight_PM,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 PM') = '9' THEN 1 ELSE 0 END) as Nine_PM,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 PM') = '10' THEN 1 ELSE 0 END) as Ten_PM,
COUNT(CASE WHEN to_char(potty_use_date, 'HH12 PM') = '11' THEN 1 ELSE 0 END) as Eleven_PM,
CASE WHEN to_char(potty_use_date, 'HH12 PM') = '12' THEN 1 ELSE 0 END) as Twelve_PM
FROM core.potty_usage_statistics
GROUP BY to_char(potty_use_date, 'yyyy-mm-dd HH12')
ORDER BY date_happened ASC;
不過,我得到以下結果:
2015-04-20 08 1197 1197 1197 1197 1197 1197 1197 1197 1197 1197 1197 1197 1197 1197 1197 1197 1197 1197 1197 1197 1197 1197 1197 1197
他們都跨日重複e結果窗口。顯然,我沒有這樣做。我該如何做對?
如果你想從你需要到位的0返回NULL聚集刪除價值進行解釋。更改您的CASE/WHEN語句。 COUNT(0)與COUNT(1)相同... – gustavodidomenico
當您給出此查詢時,您會看到什麼內容? 'SELECT potty_use_date,to_char(potty_use_date,'HH12 AM')FROM core.potty_usage_statistics'我懷疑你除了一個簡單的整數之外還有其他東西, –
這是一天中很多便利使用。 :s – GolezTrol