【发布时间】:2023-03-24 13:06:01
【问题描述】:
我得到一个表格数据如下:
ID | TYPE_ID | CREATED_DT | ROW_NUM
=====================================
123 | 485 | 2019-08-31 | 1
123 | 485 | 2019-05-31 | 2
123 | 485 | 2019-02-28 | 3
123 | 485 | 2018-11-30 | 4
123 | 485 | 2018-08-31 | 5
123 | 485 | 2018-05-31 | 6
123 | 487 | 2019-05-31 | 1
123 | 487 | 2018-05-31 | 2
我想为每个 TYPE_ID 选择 6 个 ROW_NUM,如果缺少数据,我需要为 CREATED_DT 返回 NULL 值,最终结果集应如下所示:
ID | TYPE_ID | CREATED_DT | ROW_NUM
=====================================
123 | 485 | 2019-08-31 | 1
123 | 485 | 2019-05-31 | 2
123 | 485 | 2019-02-28 | 3
123 | 485 | 2018-11-30 | 4
123 | 485 | 2018-08-31 | 5
123 | 485 | 2018-05-31 | 6
123 | 487 | 2019-05-31 | 1
123 | 487 | 2018-05-31 | 2
123 | 487 | NULL | 3
123 | 487 | NULL | 4
123 | 487 | NULL | 5
123 | 487 | NULL | 6
查询:
SELECT
A.*
FROM TBL AS A
WHERE A.ROW_NUM <= 6
UNION ALL
SELECT
B.*
FROM TBL AS B
WHERE B.ROW_NUM NOT IN (SELECT ROW_NUM FROM TBL)
AND B.ROW_NUM <= 6
我尝试使用 UNION ALL 和 ISNULL 回填不可用的数据,但它仍然给我现有的数据,但不是预期的结果。我认为这可以通过使用 CTE 以简单的方式完成,但不确定如何使其工作。在这方面可以帮助我吗?
【问题讨论】:
-
对于带有空
CREATED_DT的TYPE_IDs 是否确实存在带有ROW_NUM的条目? -
不,在这种情况下,ROW_NUM 不存在,我需要创建不存在的 ROW_NUM,并且默认 CREATED_DT 为 NULL,并且每个 TYPE_ID 的 ROW_NUM 始终为
-
只是为了确定,
ROW_NUM是表格的一部分,对吗? -
我正在使用 ROW_NUMBER() 生成它们,我发布的表是我使用 ROW_NUMBER() 逻辑后得到的临时表结果
-
@CaitLAN Jenner 有什么帮助吗?
标签: sql sql-server-2008 select common-table-expression union-all