【问题标题】:Comma separated ID column having values identical [duplicate]逗号分隔的 ID 列具有相同的值 [重复]
【发布时间】:2023-03-28 02:50:02
【问题描述】:

我有很多用逗号合并值的解决方案。 我有一些用逗号合并 id 的棘手要求。我在一个表中有大约 10 列。例如。

     declare  @t1 TABLE (id INT, NAME VARCHAR(MAX), address1 varchar(max), mobileno varchar(max));
     INSERT @t1 values (1,'100',null,'1111111111');
     INSERT @t1 values (2,'100','pune','1111111111');
     INSERT @t1 values (3,'200',null,null);
     INSERT @t1 values (4,'300','pune',null);
     INSERT @t1 values (5,'200',null,'1111111111');

    SELECT 
    STUFF((
    SELECT ','+CAST(ID AS VARCHAR(10)) [text()] 
    FROM @t1 as B
    WHERE B.NAME = A.NAME
    FOR XML PATH('')),1,1,'') as ID, NAME, address1, mobileno
    FROM @t1 as A
   GROUP BY NAME, address1, mobileno

例如。

ID | Value
---+-------
 1 | 100
 2 | 100
 3 | 200  
 4 | 200
 5 | 300

我需要像这样的输出

ID | Value
---|------
1,2| 100
3,4| 200
  5| 300

【问题讨论】:

  • 这并不罕见。谷歌:SQL Server 字符串聚合。

标签: sql sql-server-2014 string-aggregation


【解决方案1】:
--sample table:
WITH ABC
AS
(
SELECT '1' as ID, '100' as value

UNION 

SELECT '2' as ID, '100' as value

UNION 

SELECT '3' as ID, '200' as value

UNION 

SELECT '4' as ID, '200' as value

UNION 

SELECT '5' as ID, '300' as value


)
--Expected query:
SELECT 
STUFF((
SELECT ','+ID 
FROM ABC as B
WHERE B.Value = A.Value
FOR XML PATH('')),1,1,'') as ID, Value
FROM ABC as A
GROUP BY Value

--Desired output:
    ID  Value
    1,2 100
    3,4 200
    5   300

请注意:','+ ID 必须确保 ID 为 VARCHAR 或类似的字符串类型,否则需要转换才能正常工作。

【讨论】:

    猜你喜欢
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 2011-07-26
    • 2013-07-05
    • 2014-07-31
    • 1970-01-01
    相关资源
    最近更新 更多