Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按年+月划分的SQL组,但也可以获取不带记录的月份_Sql_Db2 - Fatal编程技术网

按年+月划分的SQL组,但也可以获取不带记录的月份

按年+月划分的SQL组,但也可以获取不带记录的月份,sql,db2,Sql,Db2,我想将表格内容按文本分组,然后按年份+月份分组,并将计数相加: +-------------+---------+----------+----------+ | TEXT | T1_YEAR | T1_MONTH | T1_COUNT | +-------------+---------+----------+----------+ | First Text | 2013 | 1 | 1 | | First Text | 2013 |

我想将表格内容按文本分组,然后按年份+月份分组,并将计数相加:


+-------------+---------+----------+----------+
|    TEXT     | T1_YEAR | T1_MONTH | T1_COUNT |
+-------------+---------+----------+----------+
| First Text  |    2013 |        1 |        1 |
| First Text  |    2013 |        2 |        1 |
| First Text  |    2013 |        3 |        1 |
| First Text  |    2013 |        5 |        1 |
| First Text  |    2013 |        6 |        3 |
| First Text  |    2013 |        7 |        1 |
| First Text  |    2013 |        8 |        3 |
| First Text  |    2013 |        9 |        1 |
| First Text  |    2013 |       10 |        2 |
| Second Text |    2013 |        1 |        2 |
| Second Text |    2013 |        2 |        5 |
| Second Text |    2013 |        3 |        8 |
| Second Text |    2013 |        4 |        5 |
| Second Text |    2013 |        5 |       23 |
| Second Text |    2013 |        6 |        9 |
| Second Text |    2013 |        7 |       27 |
+-------------+---------+----------+----------+
现在,我还希望在结果表中为缺少的月份创建一个计数为0的条目

我读过其他关于临时表的文章,但我还没有完全弄明白如何使它工作

WITH DATERANGE(LEVEL, TEMP_DATE) AS (
  SELECT 1, CURRENT DATE - 5 MONTHS
    FROM SYSIBM.SYSDUMMY1
  UNION ALL SELECT LEVEL + 1, TEMP_DATE + 1 MONTH
    FROM DATERANGE
    WHERE LEVEL < 1000 AND TEMP_DATE < CURRENT DATE - 1 MONTH
) SELECT TEMP_DATE FROM DATERANGE;

我怎样才能做到这一点?我正在使用DB2。

我将创建一个具有相同值的临时表。然后,您可以将其外部联接到数据表:

select
dt.theyear,
dt.themonth,
sum(t1_count)

from
DateTable DT
left outer join table1 t1
  on dt.theyear = t1.t1_year
  and dt.theMOnth = t1.t1_month
group by
dt.theyear,
dt.themonth
下面是一个SQL Fiddle示例SQL Server,因为他们没有DB2,但它的翻译应该很好:

如果没有特定月份的数据,但希望在结果中显示为count*=0,则需要将外部联接结果保留到临时表或数字为1-12的表变量,这样,如果从临时表中提取数字1-12并将其联接,对于缺少数据的月份,仍将获得一行。数到0我明白了,谢谢。我使用“INSERT INTO SESSION.T_MONTHS VALUES 1;”插入了数据在我的临时表中,但在我的临时表上选择从SESSION.T_MONTHS中选择*;返回一个空的结果集。我做错了什么?您可以使用OLAP函数解决此问题。但我现在无法编写一个示例。添加提交保留行是在临时表中保留行的解决方案。
+------------+
| TEMP_DATE  |
+------------+
| 2013-09-05 |
| 2013-10-05 |
| 2013-11-05 |
| 2013-12-05 |
| 2014-01-05 |
+------------+
select
dt.theyear,
dt.themonth,
sum(t1_count)

from
DateTable DT
left outer join table1 t1
  on dt.theyear = t1.t1_year
  and dt.theMOnth = t1.t1_month
group by
dt.theyear,
dt.themonth