回答

收藏

SQL结果按月分组

技术问答 技术问答 287 人阅读 | 0 人回复 | 2023-09-14

我试图回到滚动12个月内分散的一些结果,例如:
% s: p; E) s" G2 q3 {0 zMONTH       IN   OUTJanuary    210    1910 February   200     111111March      132   1411April     12    1411May         191   1888  etc...如何在日期内分散结果,并在第一列填写月名?
& e1 D: y0 M/ n3 B7 H在MSSQL它将类似于:
* U0 o8 ]# z6 I' J: X" N2 KSELECT  COUNT(problem.problem_type = 'IN') AS IN,    COUNT(problem.problem_type = 'OUT') AS OUT,    DATEPART(year,DateTime) as Year,   DATEPART(month,DateTime) as MonthFROM problemWHERE   (DateTime >= dbo.FormatDateTime('2010-01-01)AND     (DateTime 但这是针对Oracle因此,数据库DATEPART和DateTime不可用。
7 M. A# `+ ^$ i& ]0 H1 M( Q我的问题表大致为:
) h# a2 q+ F9 i2 \problem_ID Problem_type   IN_Date                     OUT_Date                                     IN   20101010年                                      -01-23 16:34:29.2010101010年    -02-29 13:06:28.                                                                        IN   20101010年                                      -01-27 12:34:29.2010101010年    -01-29 12:01:28.                                                          OUT   201010年   -02-13 13:24:29.2010101010年    -09-29 15:04:28.                                                                                                                                                                                                               OUT   201010年   -02-15 16:31:29.2010101010年    -07-29 11:03:28.            
" X3 n/ r0 I* `/ }& N4 ]    解决方案:                                                                6 E2 _) Z/ Z3 o2 A" N
                                                                使用:& e$ p& g# o* W: [. D: |
        SELECT SUM(CASE WHEN p.problem_type = 'IN' THEN 1 ELSE 0 END) AS IN,         SUM(CASE WHEN p.problem_type = 'OUT' THEN 1 ELSE 0 END) AS OUT,         TO_CHAR(datetime,'YYYY') AS year,        TO_CHAR(datetime,'MM') AS month    FROM PROBLEM p   WHERE p.DateTime >= TO_DATE('2010-01-01','YYYY-MM-DD        AND p.DateTime 您还可以使用:
: B4 ^% z7 I( `* o* `1 ^& d        SELECT SUM(CASE WHEN p.problem_type = 'IN' THEN 1 ELSE 0 END) AS IN,         SUM(CASE WHEN p.problem_type = 'OUT' THEN 1 ELSE 0 END) AS OUT,         TO_CHAR(datetime,'MM-YYYY') AS mon_year    FROM PROBLEM p   WHERE p.DateTime >= TO_DATE('2010-01-01','YYYY-MM-DD        AND p.DateTime < TO_DATE('2010-01-31','YYYY-MM-DD') GROUP BY TO_CHAR(datetime,'MM-YYYY
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则