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;