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

Откуда:
Сообщений: 68
Всем доброго времени суток!
Чего то не соображу.
Например, есть 2 таблицы. В одной таблица кодов продуктов со значениями и кодами групп, а в другой код группы и продукты. Нужно вывести сумму значений первой таблицы и добавить недостающие ид продуктов из второй со значением 0.
Набросал примерный запрос, но он неправильно выбирает:
+
create table #t1(
  idgroup1 int
 ,idgroup2 int
 ,idproduct int
 ,value float
)
create table #t2(
  idgroup2 int
 ,idproduct int
)

insert into #t1 values(1,8,2,10)
insert into #t1 values(1,8,2,8)
insert into #t1 values(1,8,3,15)
insert into #t1 values(2,9,1,10)
insert into #t1 values(2,9,2,8)
insert into #t1 values(3,7,3,15)
insert into #t1 values(3,7,3,8)
insert into #t1 values(3,7,1,15)

insert into #t2 values(6,1)
insert into #t2 values(6,2)
insert into #t2 values(6,3)
insert into #t2 values(7,1)
insert into #t2 values(7,2)
insert into #t2 values(7,3)
insert into #t2 values(8,1)
insert into #t2 values(8,2)
insert into #t2 values(9,1)
insert into #t2 values(9,2)
insert into #t2 values(9,3)

select * from #t1
select * from #t2

select idgroup1 
 ,idgroup2 
 ,idproduct
 ,sum(value) as value
from
(select idgroup1 
 ,idgroup2 
 ,idproduct 
 ,sum(value) as value 
 from #t1
 group by idgroup1 
 ,idgroup2 
 ,idproduct 
 
 union

select t1.idgroup1 
 ,t1.idgroup2 
 ,#t2.idproduct 
 ,t1.value
from
(select idgroup1 
 ,idgroup2 
 ,idproduct 
 ,0 as value
 from #t1
 group by idgroup1 
 ,idgroup2 
 ,idproduct) t1 right join #t2 on t1.idgroup2 = #t2.idgroup2) t
 group by idgroup1 
 ,idgroup2 
 ,idproduct
 
drop table #t1
drop table #t2


а нужно
idgroup1idgroup2idproductvalue
1810
18218
18315
29110
2928
2930
37115
3720
37323


З.Ы. Microsoft SQL Server 2008 R2
24 май 16, 07:57    [19210124]     Ответить | Цитировать Сообщить модератору
 Re: Добавление к выборке отсутствующих значений  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21485
brick08
Нужно вывести сумму значений первой таблицы

Ну и где SUM? а соответственно и GROUP BY?
24 май 16, 08:47    [19210253]     Ответить | Цитировать Сообщить модератору
 Re: Добавление к выборке отсутствующих значений  [new]
CrazHunt
Member

Откуда:
Сообщений: 40
SELECT  COALESCE(T1.idgroup1,t2.idgroup1) AS idgroup1,
		COALESCE(T1.idgroup2,t2.idgroup2) AS idgroup2,
		COALESCE(T1.idproduct,t2.idproduct) AS idproduct,
		COALESCE(T1.Value,0) AS Value
FROM    (
          SELECT  T.idgroup1 ,
                  T.idgroup2 ,
                  T.idproduct ,
                  SUM(T.value) AS Value
          FROM    #t1 T
          GROUP BY T.idgroup1 ,
                  T.idgroup2 ,
                  T.idproduct
        ) T1
FULL JOIN (
            SELECT distinct T4.idgroup1 ,
                    T4.idgroup2 ,
                    T3.idproduct
            FROM    #t2 T3
            JOIN    #t1 T4 ON T4.idgroup2 = T3.idgroup2
          ) T2 ON T2.idproduct = T1.idproduct
                  AND T2.idgroup2 = T1.idgroup2
24 май 16, 08:59    [19210292]     Ответить | Цитировать Сообщить модератору
 Re: Добавление к выборке отсутствующих значений  [new]
brick08
Member

Откуда:
Сообщений: 68
Akina
Ну и где SUM? а соответственно и GROUP BY?

Даже не знаю что вам ответить. В приведенном мной запросе есть и SUM и GROUP BY.

CrazHunt, спасибо. Хорошее решение без UNION.
24 май 16, 09:37    [19210425]     Ответить | Цитировать Сообщить модератору
 Re: Добавление к выборке отсутствующих значений  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21485
brick08
1) Насколько верно утверждение, что в первой таблице одному значению idgroup2 соответствует строго одно значение idgroup1? А наоборот?
2) Вы пишете, что нужно
brick08
добавить недостающие ид продуктов из второй

Однако в эталонном ответе первые три записи (где idgroup2 = 6 и idproduct IN 1,2,3) НЕ добавляете. Почему?
24 май 16, 10:03    [19210553]     Ответить | Цитировать Сообщить модератору
 Re: Добавление к выборке отсутствующих значений  [new]
brick08
Member

Откуда:
Сообщений: 68
Akina
brick08
1) Насколько верно утверждение, что в первой таблице одному значению idgroup2 соответствует строго одно значение idgroup1? А наоборот?
2) Вы пишете, что нужно
brick08
добавить недостающие ид продуктов из второй

Однако в эталонном ответе первые три записи (где idgroup2 = 6 и idproduct IN 1,2,3) НЕ добавляете. Почему?

1) Одному значению idgroup1 соответствует строго одно значение idgroup2. Обратное не верно.
2) Из второй таблицы нужно добавлять только те idgroup2, которые содержатся в первой таблице.
24 май 16, 11:53    [19211327]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить