代码之家  ›  专栏  ›  技术社区  ›  Jessica Warren

当有重复的id时,如何寻找唯一的值?

  •  0
  • Jessica Warren  · 技术社区  · 6 年前

    我有一张桌子,上面有重复的身份证。我想要一个包含所有三个值(TWIX、hershy和M&MS)的id值可以在不同的行上,但是我不知道如何使用逐行而不是按组的语句来查找id。

    我尝试过(在Microsoft SQL server中)

    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组具有这三个值?

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

    在这个表中,我想找到L123而不是F143。谢谢你的帮助,我很感激!

    1 回复  |  直到 6 年前
        1
  •  2
  •   Gordon Linoff    6 年前

    你可以用 group by having . 如果您想要所有三个品牌的ID:

    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 是取消激活数据的一种方便方法,因此您可以处理一列而不是两列。