SQL Server: как я могу перечислить различные значения таблицы в одной строке, разделенных запятой - PullRequest
0 голосов
/ 09 апреля 2010

У меня есть следующая таблица:

CREATE TABLE TEMP (ID INT, SEGMENT CHAR(1), SEGOFF INT, CHECKED SMALLDATETIME)

INSERT INTO TEMP VALUES (1,'A',0,'2009-05-01')
INSERT INTO TEMP VALUES (2,'B',1,'2009-05-01')
INSERT INTO TEMP VALUES (3,'C',0,'2009-05-01')
INSERT INTO TEMP VALUES (4,'A',0,'2009-05-02')
INSERT INTO TEMP VALUES (5,'B',2,'2009-05-02')
INSERT INTO TEMP VALUES (6,'C',1,'2009-05-02')
INSERT INTO TEMP VALUES (7,'A',1,'2009-05-03')
INSERT INTO TEMP VALUES (8,'B',0,'2009-05-03')
INSERT INTO TEMP VALUES (9,'C',2,'2009-05-03')

Я хотел бы показать отдельный СЕГМЕНТ в одной строке, разделенной запятой (например, A, B, C)

Я пытаюсь сделать следующее:

DECLARE @SEGMENTList varchar(100)

SELECT @SEGMENTList = COALESCE(@SEGMENTList + ', ', '') + 
     SEGMENT 
FROM TEST


SELECT @SEGMENTList

Показывает A, B, C, A, B, C, A, B, C

Что мне нужно, чтобы изменить мой запрос? Спасибо всем!

Ответы [ 4 ]

2 голосов
/ 09 апреля 2010

Вы можете добавить GROUP BY Segment к вашему выбору, и это может сработать.

Как это:

DECLARE @SEGMENTList varchar(100)

SELECT @SEGMENTList = COALESCE(@SEGMENTList + ', ', '') + 
     SEGMENT 
FROM TEMP
GROUP BY SEGMENT


SELECT @SEGMENTList
1 голос
/ 09 апреля 2010

добавить группу по предложению
группировать по сегментам

0 голосов
/ 09 апреля 2010
SELECT @SEGMENTList = COALESCE(@SEGMENTList + ', ', '') + 
     SEGMENT
FROM 
(SELECT DISTINCT Segment FROM #TEMP) AS #Test
0 голосов
/ 09 апреля 2010

Посмотрите на это

или

/ *

CREATE TABLE [dbo].[TableA](
    [id] [int] NULL,
    [type] [nvarchar](10) NULL
) ON [PRIMARY]

* /

    declare  @temp table
(
  [type] [nvarchar](10) NULL
)

    insert into @temp
    select distinct type from TableA

    declare @s1 varchar(8000)

    update t
      set  
        @s1 = ISNULL(@s1 + ',', '') + '''' + REPLACE(t.Type, '''', '''''') + ''''
    from @temp t

    select @s1
...