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

Откуда:
Сообщений: 227
CREATE TABLE #Table1
(
[ID] INT,
ID_1 INT,
Code INT
)
GO

INSERT INTO #Table1 VALUES (1, 2, 3)
INSERT INTO #Table1 VALUES (1, 2, 4)
INSERT INTO #Table1 VALUES (1, 2, 5)
INSERT INTO #Table1 VALUES (2, 7, 6)
INSERT INTO #Table1 VALUES (2, 8, 6)
INSERT INTO #Table1 VALUES (3, 2, 3)
INSERT INTO #Table1 VALUES (3, 2, 4)
INSERT INTO #Table1 VALUES (3, 9, 4)
INSERT INTO #Table1 VALUES (4, 6, 9)
INSERT INTO #Table1 VALUES (4, 6, 10)
INSERT INTO #Table1 VALUES (4, 5, 77)
GO

Результат нужный
ID, ID1, C1, C2, C3, C4
1, 2, 3, 4, 5
2, 7, 6
2, 8, 6
3, 2, 3, 4
3, 9, 4
4, 6, 9, 10
4, 5, 77
Надо сгруппировать данные по ID, ID1 и выдать список Code для каждой пары

Спасибо большое...
24 окт 13, 19:19    [15028378]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3378
https://www.sql.ru/faq/faq_topic.aspx?fid=731
24 окт 13, 19:26    [15028402]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Heart
Member

Откуда:
Сообщений: 227
мне надо каждый в своем поле.
получить результирующую таблицу ID, ID1, C1, C2, C3, C4, .. ,CN
24 окт 13, 19:35    [15028437]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Элементарно
Guest
Heart,

некорректная постановка задачи, почему 5-ка попала в C3 а 6-ка в C1?

в общем случае для таких задач - динамический скл
24 окт 13, 19:59    [15028503]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
SandalTree
Member

Откуда: Перехлёсток восьми батог
Сообщений: 28146
Heart,

А для чего надо-то?

Если количество колонок и их имена заранее не известны, то кто-ж тогда их будет парсить?

На динамику уже намекнули, мне интересно что вы с результатом делаете. Может вам так и не надо.
24 окт 13, 21:11    [15028767]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Heart
Member

Откуда:
Сообщений: 227
SandalTree, мне именно так надо. Я могу, например, статикой зафиксировать количество колонок. Максимум 10
27 окт 13, 09:30    [15037254]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Heart
Member

Откуда:
Сообщений: 227
Элементарно,

потому что в первом случае это был третий по счету код, а во втором первый.
27 окт 13, 09:31    [15037255]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
qwerty112
Guest
Heart
Элементарно,

потому что в первом случае это был третий по счету код, а во втором первый.

нет у тебя никакого "третий по счету" / "первый по счету",
а для того что бы было - нужно какое-то поле, которое задаёт этот порядок в группе {[ID], ID_1}
иначе, 5-ка для {[ID], ID_1}={1, 2} - может оказатся на любом месте: или в C1, или в C2, или в C3

select [ID], ID_1, [1] as C1, [2] as C2, [3] as C3, [4] as C4, [5] as C5, [6] as C6, [7] as C7, [8] as C8, [9] as C9, [10] as C10
from
(select [ID], ID_1, Code, row_number()over(partition by [ID], ID_1 order by (select 1)) as rn from #Table1) a
pivot (max(Code) for rn in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10])) pvt
order by 1, 2

ID          ID_1        C1          C2          C3          C4          C5          C6          C7          C8          C9          C10
----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
1           2           3           4           5           NULL        NULL        NULL        NULL        NULL        NULL        NULL
2           7           6           NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL
2           8           6           NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL
3           2           3           4           NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL
3           9           4           NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL
4           5           77          NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL
4           6           9           10          NULL        NULL        NULL        NULL        NULL        NULL        NULL        NULL

(7 row(s) affected)
27 окт 13, 10:03    [15037267]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Heart
Member

Откуда:
Сообщений: 227
Спасибо. Мне не важно на каком месте будет Код. Главное его выбрать
27 окт 13, 10:48    [15037309]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
Heart,

может так?

select distinct
	t.id, t.id_1,
	reverse(stuff(reverse(o.res),1,1,'')) as res
from #Table1 as t
outer apply
(
	select convert(varchar,code)+',' as 'data()'
	from #table1 t2
	where t.id = t2.id and t.id_1=t2.id_1
	for xml path('')
) o (res)
27 окт 13, 12:20    [15037433]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить