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

Откуда:
Сообщений: 359
Сразу говорю Pivota нет

select 
(select  PyroLink where PyroExtId=2) as [2],
(select  PyroLink where PyroExtId=3) as [3],
(select  PyroLink where PyroExtId=4) as [4]
from (select  PyroExtId, PyroLink from tblPyro_CELinks CL left join tblPyro_Link L
on CL.PyroLinkId = L.PyroLinkId
where CL.active=1
and PyroCEId=7)XX


возвращает

2       3       4
String1 NULL NULL
NULL String2 NULL
NULL NULL String3

а надо чтобы

2       3       4
String1 String2 String3
6 мар 13, 01:49    [14017262]     Ответить | Цитировать Сообщить модератору
 Re: Развернуть выборку.  [new]
Crimzic
Member

Откуда: Sydney
Сообщений: 59
Ay-y,

Как-то вот так?
select CL.PyroLinkId, 
	MIN(CASE WHEN PyroExtId=2 THEN PyroLink ELSE NULL END) as [2],
	MIN(CASE WHEN PyroExtId=3 THEN PyroLink ELSE NULL END) as [3],
	MIN(CASE WHEN PyroExtId=4 THEN PyroLink ELSE NULL END) as [4]
from tblPyro_CELinks CL 
	left join tblPyro_Link L on CL.PyroLinkId = L.PyroLinkId
where CL.active=1 and PyroCEId=7
GROUP BY CL.PyroLinkId

По-моему PIVOT делает примерно то же самое.
6 мар 13, 04:01    [14017307]     Ответить | Цитировать Сообщить модератору
 Re: Развернуть выборку.  [new]
Ay-y
Member

Откуда:
Сообщений: 359
Нет, то-же самое получается, NULL-ы в другом порядке и всё.
Те-же три ряда.
6 мар 13, 16:48    [14020842]     Ответить | Цитировать Сообщить модератору
 Re: Развернуть выборку.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
Ay-y
Те-же три ряда.
Не может быть
В запросе Crimzic на одну колонку больше
Покажите результат
6 мар 13, 16:50    [14020856]     Ответить | Цитировать Сообщить модератору
 Re: Развернуть выборку.  [new]
Ay-y
Member

Откуда:
Сообщений: 359
Пожалуйста.

К сообщению приложен файл. Размер - 15Kb
6 мар 13, 17:00    [14020941]     Ответить | Цитировать Сообщить модератору
 Re: Развернуть выборку.  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Ay-y
Нет, то-же самое получается, NULL-ы в другом порядке и всё.
Те-же три ряда.
Так уберите из SELECTа CL.PyroLinkId и уберите GROUP BY. Элементарно же!
Можно и в первом варианте просто добавить в каждый SELECT TOP 1 ... ORDER BY PyroLink DESC.

В предлагаемом MIN(), однако, некоторые значения будут равны NULL.
Оно, может, и ничего, но сервер вернёт предупреждение о том,
что NULLы внутри агрегатной функции он проигнорировал.
Если это нежелательно, можно ещё скомбинировать ISNULL/NULLIF
6 мар 13, 17:01    [14020952]     Ответить | Цитировать Сообщить модератору
 Re: Развернуть выборку.  [new]
icprog
Member

Откуда:
Сообщений: 166
Crimzic
Ay-y,

Как-то вот так?
select CL.PyroLinkId, 
	MIN(CASE WHEN PyroExtId=2 THEN PyroLink ELSE NULL END) as [2],
	MIN(CASE WHEN PyroExtId=3 THEN PyroLink ELSE NULL END) as [3],
	MIN(CASE WHEN PyroExtId=4 THEN PyroLink ELSE NULL END) as [4]
from tblPyro_CELinks CL 
	left join tblPyro_Link L on CL.PyroLinkId = L.PyroLinkId
where CL.active=1 and PyroCEId=7
GROUP BY CL.PyroLinkId

По-моему PIVOT делает примерно то же самое.


Может стоит исключить из выборки столбец CL.PyroLinkId и, соответственно, не нужна будет группировка по нему
6 мар 13, 17:02    [14020966]     Ответить | Цитировать Сообщить модератору
 Re: Развернуть выборку.  [new]
icprog
Member

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

упс, повтор сообщения iap получился )))
6 мар 13, 17:03    [14020978]     Ответить | Цитировать Сообщить модератору
 Re: Развернуть выборку.  [new]
Ay-y
Member

Откуда:
Сообщений: 359
iap
Ay-y
Нет, то-же самое получается, NULL-ы в другом порядке и всё.
Те-же три ряда.
Так уберите из SELECTа CL.PyroLinkId и уберите GROUP BY. Элементарно же!
Можно и в первом варианте просто добавить в каждый SELECT TOP 1 ... ORDER BY PyroLink DESC.

В предлагаемом MIN(), однако, некоторые значения будут равны NULL.
Оно, может, и ничего, но сервер вернёт предупреждение о том,
что NULLы внутри агрегатной функции он проигнорировал.
Если это нежелательно, можно ещё скомбинировать ISNULL/NULLIF

Точно, спасибо.
6 мар 13, 17:10    [14021035]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить