Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как склеить две строчки результирующего набора в одну ?  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
Есть два запроса, которые возвращают ID пользователя и его параметры.
В итоге выводится так:

ID  param
1   '1'
1   '2'
2  '1'
3  '2'


в param может быть строго либо 1 либо 2 либо 1/2 (если нет ничего, то такое просто в запрос не попадет).


Вопрос. Как сделать, чтобы вывод был

ID  param
1   '1/2'
2  '1'
3  '2'


Спасибо !
4 дек 14, 14:25    [16949708]     Ответить | Цитировать Сообщить модератору
 Re: Как склеить две строчки результирующего набора в одну ?  [new]
icprog
Member

Откуда:
Сообщений: 166
ProBiotek,

FAQ
4 дек 14, 14:30    [16949748]     Ответить | Цитировать Сообщить модератору
 Re: Как склеить две строчки результирующего набора в одну ?  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21101
SELECT id
, CAST(CASE SUM(/* DISTINCT*/ CAST(param AS INT)) 
       WHEN 1 THEN '1'
       WHEN 2 THEN '2'
       WHEN 3 THEN '1/2'
       END 
       AS CHAR(3)
      )param
FROM MyQuery
GROUP BY id
4 дек 14, 14:34    [16949792]     Ответить | Цитировать Сообщить модератору
 Re: Как склеить две строчки результирующего набора в одну ?  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
icprog,

хм... Все решения через создание процедуры ?
А через простой SQL можно ?
4 дек 14, 14:35    [16949800]     Ответить | Цитировать Сообщить модератору
 Re: Как склеить две строчки результирующего набора в одну ?  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21101
Упс... внешний каст не нужен же ж...
4 дек 14, 14:35    [16949802]     Ответить | Цитировать Сообщить модератору
 Re: Как склеить две строчки результирующего набора в одну ?  [new]
Shakill
Member

Откуда: мск
Сообщений: 1882
ProBiotek
icprog,

хм... Все решения через создание процедуры ?
А через простой SQL можно ?


где там "через создание процедуры", вы точно прочитали faq?
4 дек 14, 14:38    [16949826]     Ответить | Цитировать Сообщить модератору
 Re: Как склеить две строчки результирующего набора в одну ?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8584
ProBiotek
icprog,

хм... Все решения через создание процедуры ?
А через простой SQL можно ?


Смотрите ссылку ещё раз.
4 дек 14, 14:40    [16949842]     Ответить | Цитировать Сообщить модератору
 Re: Как склеить две строчки результирующего набора в одну ?  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
Akina
SELECT id
, CAST(CASE SUM(/* DISTINCT*/ CAST(param AS INT)) 
       WHEN 1 THEN '1'
       WHEN 2 THEN '2'
       WHEN 3 THEN '1/2'
       END 
       AS CHAR(3)
      )param
FROM MyQuery
GROUP BY id


О !! гениально.
Спасибо !
4 дек 14, 14:43    [16949888]     Ответить | Цитировать Сообщить модератору
 Re: Как склеить две строчки результирующего набора в одну ?  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
WITH S AS 
(SELECT * FROM (VALUES(1, '1'), (1, '2'), (2, '1'), (3, '2')) AS T(ID, param))
SELECT DISTINCT ID, LEFT(P.C, LEN(P.C) - 1) FROM S CROSS APPLY (SELECT T.param + '/' AS 'text()'
		  FROM S AS T WHERE T.ID = S.ID
		  FOR XML PATH ('')) AS P(C)
4 дек 14, 14:48    [16949938]     Ответить | Цитировать Сообщить модератору
 Re: Как склеить две строчки результирующего набора в одну ?  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
Jovanny
WITH S AS 
(SELECT * FROM (VALUES(1, '1'), (1, '2'), (2, '1'), (3, '2')) AS T(ID, param))
SELECT DISTINCT ID, LEFT(P.C, LEN(P.C) - 1) FROM S CROSS APPLY (SELECT T.param + '/' AS 'text()'
		  FROM S AS T WHERE T.ID = S.ID
		  FOR XML PATH ('')) AS P(C)


Мне кажется вариант через CASE выше гораздо понятней и проще :)
4 дек 14, 14:51    [16949972]     Ответить | Цитировать Сообщить модератору
 Re: Как склеить две строчки результирующего набора в одну ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
ProBiotek
Мне кажется вариант через CASE выше гораздо понятней и проще :)

Точно. Особенно для данных вида

ID param
1 '1'
1 'A'
2 'B'
3 'C'
4 дек 14, 14:54    [16949989]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить