Конвертировать несколько строк в одну - SQL - PullRequest
1 голос
/ 16 марта 2020

Я пытаюсь разместить столбец 'test' в той же строке. Я использую Stuff(), однако, кажется, что столбец 'test' проходит через все qID. Чего мне не хватает?

SELECT DISTINCT qID,
                STUFF((
                select ',' + B.text
                from tbl B
                where B.qID=qID
                order by B.text
                for xml path('')
                ),1,1,'') as test
FROM tbl 
WHERE qID in (2258060,2296222)
GROUP BY qID

enter image description here

1 Ответ

4 голосов
/ 16 марта 2020

Вы пропустили псевдоним в таблице

  1. Условие B.qID = qID всегда возвращает true, как если бы 1 = 1, он ничего не делал. Это было похоже на B.qID = B.qID.

Использование псевдонима:

SELECT DISTINCT qID,
                STUFF((
                select ',' + B.text
                from tbl B
                where B.qID=A.qID
                order by B.text
                for xml path('')
                ),1,1,'') as test
FROM tbl A
WHERE qID in (2258060,2296222)
GROUP BY qID

Это также возможно без псевдонима для внешнего запроса, используя само имя таблицы.

SELECT DISTINCT qID,
                STUFF((
                select ',' + B.text
                from tbl B
                where B.qID=tbl.qID --Table name before qid here 
                order by B.text
                for xml path('')
                ),1,1,'') as test
FROM tbl
WHERE qID in (2258060,2296222)
GROUP BY qID
...