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

Откуда: Россия
Сообщений: 453
Здравствуйте уважаемые господа форумчане!
Совсем туго с SQL инновациями в такую журу, киплю в прямом и переносном смысле :)
Проблем в запросе, есть несколько таблиц:
CREATE TABLE #t1 (f1 int, s int)
CREATE TABLE #t2 (f2 int, s int)
CREATE TABLE #t3 (f3 int, s int)

INSERT INTO #t1 VALUES (10, 1)
INSERT INTO #t1 VALUES (15, 2)
INSERT INTO #t1 VALUES (20, 3)
INSERT INTO #t2 VALUES (-10, 1)
INSERT INTO #t2 VALUES (-70, 3)
INSERT INTO #t3 VALUES (90, 2)
INSERT INTO #t3 VALUES (87, 3)

--DROP TABLE #t1
--DROP TABLE #t2
--DROP TABLE #t3
Как из них получить такой результат (можно ли обойтись только SELECT, без временных таблиц?):
sf1f2f3
110-100
215090
320-7087

Заранее благодарю!
3 авг 09, 13:24    [7490618]     Ответить | Цитировать Сообщить модератору
 Re: Аналог перекрестного запроса, но возможно проще..  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
select t1.s, isnull(t1.f1, 0) as f1, isnull(t2.f2, 0) as f2, isnull(t3.f3, 0) as f3
  from #t1 as t1
  full join #t2 as t2 on t2.s = t1.s
  full join #t3 as t3 on t3.s = t1.s

s           f1          f2          f3
----------- ----------- ----------- -----------
1           10          -10         0
2           15          0           90
3           20          -70         87

(3 row(s) affected)
3 авг 09, 13:34    [7490683]     Ответить | Цитировать Сообщить модератору
 Re: Аналог перекрестного запроса, но возможно проще..  [new]
f50
Member

Откуда: Россия
Сообщений: 453
Паганель
Супер, самое то что и надо! Спасибо огромное!!!
3 авг 09, 13:40    [7490728]     Ответить | Цитировать Сообщить модератору
 Re: Аналог перекрестного запроса, но возможно проще..  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
select
	coalesce(t1.s, t2.s, t3.s) as s
	, isnull(t1.f1, 0) as f1
	, isnull(t2.f2, 0) as f2
	, isnull(t3.f3, 0) as f3
from #t1 as t1
full join #t2 as t2 on t2.s = t1.s
full join #t3 as t3 on t3.s = t1.s
3 авг 09, 13:40    [7490735]     Ответить | Цитировать Сообщить модератору
 Re: Аналог перекрестного запроса, но возможно проще..  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Эх, на такой простой вещи так я ошибся
Позор на мою седую голову
select coalesce(t1.s, t2.s, t3.s) as s
      ,isnull(t1.f1, 0) as f1, isnull(t2.f2, 0) as f2, isnull(t3.f3, 0) as f3
  from #t1 as t1
  full join #t2 as t2 on t2.s = t1.s
  full join #t3 as t3 on t3.s = isnull(t1.s, t2.s)
3 авг 09, 15:49    [7491408]     Ответить | Цитировать Сообщить модератору
 Re: Аналог перекрестного запроса, но возможно проще..  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
select s, sum(f1), sum(f2), sum(f3)
from(
select s, f1, 0 f2, 0 f3 from #t1
union
select s, 0 ,  f2, 0  from #t1
union
select s, 0, 0 ,  f3 from #t1
) x
group by s
3 авг 09, 16:25    [7491659]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить