5

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

我已经尝试使用MONTH(DATE)带有Group byand命令的Order By命令,并且我得到了表中列出的 4 年返回的月份。我返回 48 行,列出 1-12,重复 4 次。我想按顺序获得 1-12 的 1 个回报。

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

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

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

如果有人可以请帮我一把。这是我要使用的 Db,CONVERT但它不适用于我们的服务器。

4

4 回答 4

10

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

select MONTH(DATE) As "Month"
from DW******.SL****
Group By MONTH(DATE)
Order by MONTH(DATE)
于 2013-01-11T21:39:07.913 回答
2

您需要 group by MONTH(Date),而不是 DATE

select MONTH(DATE) As "Month"
from DW******.SL****
Group By MONTH(DATE)
Order by MONTH(DATE) 
于 2013-01-11T21:41:43.203 回答
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]

于 2013-01-11T23:27:09.270 回答
1

如果您需要一月、二月、三月等月份,请使用以下查询

从客户中选择 MONTHNAME (CURRENT_TIMESTAMP);

于 2014-06-09T20:49:07.947 回答