Select result 如果找到重复行,则从另一个字段追加数据
Select result Append data from another field if duplicate row is find
我在 table 的列上执行 select,但我想如果该列中有重复的行,则从另一列追加数据。
我从 select
语句中得到这些数据:
MOD_CDS_TEXT MOD_PCON_START MOD_PCON_END
----------------------------------------------------
CORDOBA (6K1, 6K2) 199302 199910
CORDOBA (6K2) 199906 200210
CORDOBA (6L2) 200209 200911
CORDOBA Vario (6K5) 199906 200212
CORDOBA Vario (6K5) 199608 199906
EXEO (3R2) 200812 NULL
正如您在 MOD_CDS_TEXT
列的 select 中看到的,有两个相同的行:CORDOBA Vario (6K5)
我需要做的是每当有相同的 2 或 3 或 n 行具有相同的数据时,我想从其他列追加数据并得到这个结果:
MOD_CDS_TEXT MOD_PCON_START MOD_PCON_END
----------------------------------------------------------
CORDOBA (6K1, 6K2) 199302 199910
CORDOBA (6K2) 199906 200210
CORDOBA (6L2) 200209 200911
CORDOBA Vario (6K5)(99_02) 199906 200212
CORDOBA Vario (6K5)(96_99) 199608 199906
EXEO (3R2) 200812 NULL
我设法做了一些事情,但我只得到了第二个重复行,关于如何将重复的第一行也制作成第二行的任何想法:
这是我所做的:
SELECT (IIF(ROW_NUMBER() OVER (PARTITION BY MOD_CDS_TEXT ORDER BY (SELECT MOD_CDS_TEXT)) = 1,
MOD_CDS_TEXT,
MOD_CDS_TEXT + '(' + SUBSTRING(MOD_PCON_START, 3, 2) + '_' + SUBSTRING(MOD_PCON_END, 3, 2) + ')')
) AS TEST
FROM TestTable;
对于重复的第一行,ROW_NUMBER为1,因此使用原始值。但是您不想检查 ROW_MUMBER 而是值的出现次数 (COUNT),因此请使用以下内容:
SELECT
CASE COUNT(*) OVER (PARTITION BY MOD_CDS_TEXT)
WHEN 1 THEN MOD_CDS_TEXT
ELSE MOD_CDS_TEXT + '('
+ SUBSTRING(MOD_PCON_START, 3, 2) + '_'
+ SUBSTRING(MOD_PCON_END, 3, 2) + ')'
END AS TEST
FROM TestTable;
我在 table 的列上执行 select,但我想如果该列中有重复的行,则从另一列追加数据。
我从 select
语句中得到这些数据:
MOD_CDS_TEXT MOD_PCON_START MOD_PCON_END
----------------------------------------------------
CORDOBA (6K1, 6K2) 199302 199910
CORDOBA (6K2) 199906 200210
CORDOBA (6L2) 200209 200911
CORDOBA Vario (6K5) 199906 200212
CORDOBA Vario (6K5) 199608 199906
EXEO (3R2) 200812 NULL
正如您在 MOD_CDS_TEXT
列的 select 中看到的,有两个相同的行:CORDOBA Vario (6K5)
我需要做的是每当有相同的 2 或 3 或 n 行具有相同的数据时,我想从其他列追加数据并得到这个结果:
MOD_CDS_TEXT MOD_PCON_START MOD_PCON_END
----------------------------------------------------------
CORDOBA (6K1, 6K2) 199302 199910
CORDOBA (6K2) 199906 200210
CORDOBA (6L2) 200209 200911
CORDOBA Vario (6K5)(99_02) 199906 200212
CORDOBA Vario (6K5)(96_99) 199608 199906
EXEO (3R2) 200812 NULL
我设法做了一些事情,但我只得到了第二个重复行,关于如何将重复的第一行也制作成第二行的任何想法:
这是我所做的:
SELECT (IIF(ROW_NUMBER() OVER (PARTITION BY MOD_CDS_TEXT ORDER BY (SELECT MOD_CDS_TEXT)) = 1,
MOD_CDS_TEXT,
MOD_CDS_TEXT + '(' + SUBSTRING(MOD_PCON_START, 3, 2) + '_' + SUBSTRING(MOD_PCON_END, 3, 2) + ')')
) AS TEST
FROM TestTable;
对于重复的第一行,ROW_NUMBER为1,因此使用原始值。但是您不想检查 ROW_MUMBER 而是值的出现次数 (COUNT),因此请使用以下内容:
SELECT
CASE COUNT(*) OVER (PARTITION BY MOD_CDS_TEXT)
WHEN 1 THEN MOD_CDS_TEXT
ELSE MOD_CDS_TEXT + '('
+ SUBSTRING(MOD_PCON_START, 3, 2) + '_'
+ SUBSTRING(MOD_PCON_END, 3, 2) + ')'
END AS TEST
FROM TestTable;