【发布时间】:2022-11-30 22:44:16
【问题描述】:
我正在尝试构建一个数据库,我希望按照预期输出中提到的那样对数据进行格式化。以下是DDL
CREATE TABLE TEST
(UID int, A1 VARCHAR(10), A2 VARCHAR(10), A3 VARCHAR(10), A4 VARCHAR(10));
INSERT INTO TEST VALUES
(1, 'A1' , 'B1', 'C1', NULL),
(2, 'A1' , 'B1', 'C1', 'D1'),
(3, 'A2' , 'B2', 'C2', 'D1'),
(4, 'A1' , 'B1', 'C1', 'D2'),
(5, 'A2' , 'B2', 'C2', 'D4'),
(6, 'A2' , 'B2', 'C2', 'D6'),
(7, NULL, NULL, 'C3' , NULL),
(8, NULL, NULL, 'C3' , 'd7');
我正在寻找的是创建两个 ID 列 - 一个基于 A1、A2、A3 列组合的分组,另一个基于这三列中的 row_number
预期成绩:
| UID | A1 | A2 | A3 | A4 | R1ID | R2ID |
|---|---|---|---|---|---|---|
| 7 | Null | Null | C3 | null | 1 | 1 |
| 8 | Null | Null | C3 | d7 | 1 | 2 |
| 1 | A1 | B1 | C1 | null | 2 | 1 |
| 2 | A1 | B1 | C1 | D1 | 2 | 2 |
| 4 | A1 | B1 | C1 | D2 | 2 | 3 |
| 3 | A2 | B2 | C2 | D1 | 3 | 1 |
| 5 | A2 | B2 | C2 | D4 | 3 | 2 |
| 6 | A2 | B2 | C2 | D6 | 3 | 3 |
我试过了
select *,
row_number() over (partition by A1,A2,A3 ORDER BY A4) AS R2ID
FROM TEST;
这只是给了我预期结果 (R2ID) 的最后一列,但我怎样才能同时获得预期的列 (R1ID n R2ID)?
【问题讨论】:
标签: sql-server database group-by row-number