При наличии дублированных идентификаторов, как вы ищете уникальные значения? - PullRequest
0 голосов
/ 27 августа 2018

У меня есть таблица с идентификаторами, которые повторяются.Мне нужен идентификатор, который имеет все три значения (TWIX, HERSHYS и M & MS). Значения могут быть в разных строках, но я не знаю, как найти идентификатор с помощью операторов, которые идут построчно, а не группами.

Я пытался (на сервере Microsoft SQL)

select *, 
case when 'Hershys' in (Col1, Ccol2) then 1 else 0 as case1,
case when 'TWIX' in (Col1, Col2) then 1 else 0 as case2,
case when 'M&M' in (Col1, Col2) then 1 else 0 as case3
into #candyflags_t1
from table 


   select * from #candyflags_t1
   where case1 > 0 and case2> 0 and case3 > 0

это не работает из-за sql построчно.Как я должен идти о создании флагов или запросе этого, чтобы найти, какая группа идентификаторов имеет все три значения?

 `+--------------------+----------+
    |  ID     |    Col1    | Col2    |
    +---------------------+----------+
    | L123    |   TWIX     |         |       
     +--------------------+----------+
    | L123    |  Hershys   |         |
    +--------------------+-----------+           
    | L123    |            |   m&ms  |
    +--------------------+----------+
    | F143    |            |   m&ms  |
    +--------------------+----------+
    | F143    |   Snickers | gummies |
    +--------------------+----------+

В этой таблице я хотел бы найти L123, но не F143.Спасибо за помощь, я ценю это!

1 Ответ

0 голосов
/ 27 августа 2018

Вы можете использовать group by и having.Если вам нужны идентификаторы всех трех брендов:

select id
from table t cross apply
     (values (col1), (col2)) v(col)
where col in ('Hershys', 'TWIX', 'M&M')
group by id
having count(distinct col) = 3;

cross apply - это удобный способ разворачивания данных, поэтому вы можете работать с одним столбцом вместо двух.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...