Запрос SQL для просмотра, если запрос содержит оба типа - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь создать еще один столбец, который даст мне Y, если номер элемента находится на обоих заводах, или N, если он расположен только на 1 заводе.

Raw data:
ItemNum   Item    Plant
1         apple   rightplant
2         orange  leftplant
2         grape   rightplant
1         apple   left plant

Expected outcome:
ItemNum   Item    Plant       PlantBoth
1         apple   rightplant      Y
2         orange  leftplant       N
2         grape   rightplant      N
1         apple   left plant     Y

Попытка (вероятно, мне понадобится случай, чтобы оправдать Y или N, я бы предположил):

Select mi.ItemNum, mi.Item, mi.Plant, 
(Select plant from myitems where itemnum = mi.itemnum and count(plant) > 1) as Plantboth 
from  myitems mi

Ответы [ 3 ]

1 голос
/ 02 июля 2019

Вы можете использовать оконные функции:

select i.*,
       (case when min(plant) over (partition by itemnum, item) <>
                  max(plant) over (partition by itemnum, item)
             then 'Y'
             else 'N'
        end) as PlantBoth
from myitems i;
0 голосов
/ 02 июля 2019

Группировка по номенклатуре, пункт, чтобы получить количество растений и присоединиться к таблице:

select 
  m.*,
  case g.counter when 2 then 'Y' else 'N' end plantboth 
from myitems m inner join (
  select itemnum, item, count(distinct plant) counter
  from myitems 
  group by itemnum, item
) g on g.itemnum = m.itemnum and g.item = m.item
0 голосов
/ 02 июля 2019

Вы можете попробовать это так

--Create test data
declare @data table( itemNum int, Item varchar(20), Plant varchar(20))

insert into @data (itemNum, Item, Plant)
select 1, 'apple','rightplant' union
select 2, 'orange','rightplant' union
select 2, 'grape','leftplant' union
select 1, 'apple','leftplant'

--A left join returns all data from D1 and optionally D2 if there is a match.
--The case statement looks to see if there is a match.

select d1.*, 
case when d2.itemNum is null then 'N' else 'Y' end as [Match]
from @data D1
left join @data D2 
    on d1.itemNum = d2.itemNum and d1.Item = D2.item and d1.plant != d2.plant
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...