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

Откуда:
Сообщений: 2
Добрый день. Только начал свой путь в мир запросов, поэтому прошу помощи в составлении условия. MSSQL 2008.

Дано:

Table-1
uidName
1Вася
2Петя

Table-2
uidColumnValue
1Column-1123
1Column-2456
2Column-2789

Ожидаемый результат:
NameValue-1Value-2
Вася123456
Петя789

Составил запрос:

SELECT T1.Name, T1.Value-1, T2.Value-2
FROM (
	SELECT A.Name, B.Value AS Value-1
	FROM [dbo].[Table-1] A, [dbo].[Table-2] B
	WHERE B.uid=A.uid and B.Column = 'Column-1'
	) T1,
	(
	SELECT A.Name, B.Value AS Value-2
	FROM [dbo].[Table-1] A, [dbo].[Table-2] B
	WHERE B.uid=A.uid and B.Column = 'Column-2'
	) T2
WHERE T1.Name = T2.Name

но по нему не обрабатывается "Петя", т.к. поля Column-1 у него нет.
16 мар 14, 19:36    [15733996]     Ответить | Цитировать Сообщить модератору
 Re: Составление условия для запроса  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
Wer1t
Составил запрос:
В таких случаях нужно использовать OUTER-джойны

И вообще, не перечисляйте таблицы через запаятую, привыкайте писать JOIN
SELECT A.Name, B.Value AS Value-1, C.Value AS Value-2
FROM [dbo].[Table-1] as A
	LEFT JOIN [dbo].[Table-2] as B
		ON B.uid=A.uid and B.Column = 'Column-1'
	LEFT JOIN [dbo].[Table-2] as C
		ON C.uid=A.uid and C.Column = 'Column-2'
16 мар 14, 20:48    [15734282]     Ответить | Цитировать Сообщить модератору
 Re: Составление условия для запроса  [new]
_human
Member

Откуда:
Сообщений: 569
Wer1t,
еще можете PIVOT использовать, что б развернуть данные
16 мар 14, 21:12    [15734376]     Ответить | Цитировать Сообщить модератору
 Re: Составление условия для запроса  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
select
 p.Name, p.[Column-1] as [Value-1], p.[Column-2] as [Value-2]
from
 (
  select
   t1.Name, t2.[Column], t2.Value
  from
   [dbo].[Table-1] t1 left join
   [dbo].[Table-2] t2 on t2.uid = t1.uid
 ) t
 pivot (
  max(t.Value) for [Column] in ([Column-1], [Column-2])
 ) p;
16 мар 14, 21:27    [15734438]     Ответить | Цитировать Сообщить модератору
 Re: Составление условия для запроса  [new]
Wer1t
Member

Откуда:
Сообщений: 2
Благодарю за помощь, уважаемые. Использовал вариант alexeyvg.
17 мар 14, 09:48    [15736090]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить