Как получить список продуктов, выпущенных в последнем квартале, если продукт запущен в разное время в разных регионах - PullRequest
0 голосов
/ 12 октября 2018

У меня есть таблица

/---------------------------------------\
|Region | Product | 1 |  2  |  3  |  4  |
|-------|---------|---|-----|-----|-----|
|   A   |   ABC   | 0 | 120 | 421 | 520 |
|   B   |   ABC   | 0 |   0 |   0 | 670 |
|   C   |   DEF   | 0 |   0 |   0 | 125 |
|   D   |   PQR   | 0 |   0 | 780 | 560 |
|   E   |   PQR   | 0 |   0 |   0 | 340 |
|   F   |   XYZ   | 0 |   0 |   0 | 780 |
|   G   |   XYZ   | 0 |   0 |   0 | 900 |
\---------------------------------------/

В этой таблице мне нужно найти название продуктов, которые были запущены в четвертом квартале.

Результат, который должен дать запрос, - это DEF иXYZ

Буду благодарен, если кто-нибудь сможет помочь

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Вам необходимо сгруппировать по продуктам и агрегировать (суммировать) значения для каждого квартала по продукту независимо от региона:

select
    Product
from #table
group by Product
having sum([4]) > 0
and sum([3]) = 0
and sum([2]) = 0
and sum([1]) = 0

С примерами данных для иллюстрации:

create table #table
(
    Region varchar(1),
    Product varchar(3),
    [1] int,
    [2] int,
    [3] int,
    [4] int
)

insert into #table
values 
    ('A','ABC',0,120,421,520),
    ('B','ABC',0,0,0,670),
    ('C','DEF',0,0,0,125),
    ('D','PQR',0,0,780,560),
    ('E','PQR',0,0,0,340),
    ('F','XYZ',0,0,0,780),
    ('G','XYZ',0,0,0,900)

select
    Product
from #table
group by Product
having sum([4]) > 0
and sum([3]) = 0
and sum([2]) = 0
and sum([1]) = 0

drop table #table

Выход:

/---------\
| Product |
|---------|
|   DEF   |
|   XYZ   |
\---------/
0 голосов
/ 12 октября 2018

попробуйте это

select * 
from yourTableName a 
where a.field4 > 0 
     and a.field3 = 0
     and a.field2 = 0
     and a.field1 = 0
     and a.product not in (select b.product 
                           from yourTableName b 
                           where b.field3 >0 
                                 or b.field2>0 
                                 or b.field1>0) 

, и если вы просто хотите, чтобы продукт использовался ниже

select a.product 
    from yourTableName a 
    where a.field4 > 0 
         and a.field3 = 0
         and a.field2 = 0
         and a.field1 = 0
         and a.product not in (select b.product 
                               from yourTableName b 
                               where b.field3 >0 
                                     or b.field2>0 
                                     or b.field1>0) 

здесь field4 как 4-й квартал field3 как 3-й квартал и т. Д.

...