在SQL中按MONTH分组

时间:2013-01-11 21:34:58

标签: sql db2 ibm-midrange

我正在尝试整理一个表格,该表格将采用完整日期,YYYY-MM-DD,仅提取月份信息,然后将这些月份组合为单独的行。

我尝试使用MONTH(DATE)命令,使用Group byOrder By命令,我获得了表中列出的4年内返回的月份。我给出48行,列出1-12,重复4次。我希望按顺序获得1到1的回报。

这是我到目前为止的代码。

select MONTH(DATE) As "Month"
from DW******.SL****
Group By DATE
Order by DATE 

刚开始使用SQL,所以我为这个简单的问题道歉。

如果有人可以请你帮忙。这是我的Db,我将使用CONVERT,但这不适用于我们的服务器。

4 个答案:

答案 0 :(得分:9)

你不能在你的小组中使用月份(日期)吗?

select MONTH(DATE) As "Month"
from DW******.SL****
Group By MONTH(DATE)
Order by MONTH(DATE)

答案 1 :(得分:2)

您需要按MONTH(Date)分组,而不是DATE

select MONTH(DATE) As "Month"
from DW******.SL****
Group By MONTH(DATE)
Order by MONTH(DATE) 

答案 2 :(得分:1)

另一种方法可能会帮助您,因为您会进入更复杂的查询,这些查询允许您在块(或阶段)中精神崩溃。

它看起来像这样:

WITH  x as
( fullselect1)
fullselect2

其中x表示 fullselect1 ,x用作 fullselect2 中的FROM表。您可以将此视为步骤1和步骤2,尽管优化程序可以完成此操作但是它会选择。

在你的情况下,你可以说

with Q as
( select MONTH(DATE) as mo, units
    from DW******.SL**** 
)
select mo, sum( units ) qty_sold
  from Q
  group by mo
  order by mo

这个概念虽然不是必需的,但可以很好地扩展,并且可以帮助您编写复杂的查询,将其分解为更容易理解的部分。

如果你在参考手册中看到这一点(我将提供信息中心的链接),IBM将其称为公用表表达式。 [CTE]

答案 3 :(得分:1)

如果您需要1月,2月,3月等月份,请使用以下查询

从客户处选择MONTHNAME(CURRENT_TIMESTAMP);