我正在尝试整理一个表格,该表格将采用完整日期,YYYY-MM-DD,仅提取月份信息,然后将这些月份组合为单独的行。
我尝试使用MONTH(DATE)
命令,使用Group by
和Order 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
,但这不适用于我们的服务器。
答案 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);