Получить одну строку и 2 столбца результат: с счетом (*) в 1-м столбце и объединенными строками во 2-м столбце - PullRequest
0 голосов
/ 22 мая 2018

Таблица: У меня есть таблица базы данных table_1 в SQL Server 2012 с данными как:

CREATE TABLE table_1 ([ID] BIT, [Name] VARCHAR(10))

INSERT INTO table_1 ([ID],[Name]) VALUES (1,'A')
INSERT INTO table_1 ([ID],[Name]) VALUES (0,'B')
INSERT INTO table_1 ([ID],[Name]) VALUES (0,'C')

Что я хочу - это одна строка с двумя столбцамив результате.Например:

col_1   col_2
2       B, C have zero value

Итак, я хочу узнать, сколько записей в столбце [ID] равно 0, а затем отобразить их количество в виде col_1 в результате.Тогда col_2 должен иметь все (сцепленные) строки из столбца [имя], когда в столбце [ID] было 0. Эта более поздняя часть для получения сцепленных строк из столбца [имя] - это то, что я не могу получить.

Этодолжно быть очень простым, но я не могу сделать это за пределами этого SQL:

 SELECT COUNT(*) AS col_1 FROM table_1 WHERE ID = 0;

Как я могу добавить второй столбец col_2, который будет иметь сцепленные строки из col_2?Если count (*) равен нулю, col_2 может быть пустым.(Было бы здорово, если бы я мог добавить NA)

Я пытался использовать решения из этих потоков url1 и url2 , но не смог настроить его для получения количества (*) как ноль, когда столбец идентификатора не имеет 0.

1 Ответ

0 голосов
/ 24 мая 2018

Примите решение для объединения строк, которое вы уже связали в подзапросе, чтобы получить текст.Поместите это вместе с другим подзапросом для графа.И выберите один как col_1, другой как col_2.

SELECT (SELECT count(*)
               FROM table_1
               WHERE ID = 0) col_1,
        (SELECT substring((SELECT ', ' + Name [text()]
                                  FROM table_1
                                  WHERE ID = 0
                                  FOR XML PATH('')),
                          3,
                          len((SELECT ', ' + Name [text()]
                                      FROM table_1
                                      WHERE ID = 0
                                      FOR XML PATH(''))) - 2)) col_2;

(протестировано на SQL Server 2014, но, насколько я понимаю, в документах ничего не должно быть, версия2012 не может сделать.)

...