【问题标题】:SQL Server : SELECT DISTINCT [COL1] from {TABLE} WHERE [COL2] = 'A' AND [COL2] <> 'B'SQL Server:从 {TABLE} 中选择 DISTINCT [COL1] WHERE [COL2] = 'A' AND [COL2] <> 'B'
【发布时间】:2013-09-17 18:52:43
【问题描述】:

我必须找到一个SELECT DISTINCT [COL1] from {TABLE},可以从 [COL1] 中找到所有内容,[COL2] 中有 'A',但 [COL2] 中没有'B' 在这种情况下,'3' 和 '4' 应该是结果

表格

   [COL1]      [COL2]
   ----        ----
   '1'          'A'
   '1'          'B'
   '1'          'C'
   '2'          'B'
   '2'          'C'
   '3'          'A'
   '3'          'C'
   '4'          'A'
   '4'          'D'

【问题讨论】:

    标签: sql sql-server select distinct multiple-records


    【解决方案1】:
    SELECT [COL1] from {TABLE} WHERE [COL2] = 'A' 
    EXCEPT
    SELECT [COL1] from {TABLE} WHERE [COL2] = 'B'
    

    或者

    SELECT [COL1]
    FROM   {TABLE}
    GROUP  BY [COL1]
    HAVING MAX(CASE
                 WHEN [COL2] = 'A' THEN 1
                 ELSE 0
               END) = 1
           AND MAX(CASE
                     WHEN [COL2] = 'B' THEN 1
                     ELSE 0
                   END) = 0 
    

    【讨论】:

    • 不应该加DISTINCT吗?
    • 好的,只是问一下,因为我用的不多。
    • @jyparask - 类似于 UNIONUNION ALL。有一个EXCEPT ALL,但没有在 SQL Server 中实现。
    • 所以我猜到了:)。谢谢你的信息。
    • 我不能用 EXCEPT,所以我试试另一个例子 :-)
    【解决方案2】:
    SELECT DISTINCT [COL1]
    FROM {TABLE} t1
    WHERE t2.[COL2] = 'A'
    AND NOT EXISTS
    (
        SELECT 1
        FROM {TABLE} t2
        WHERE t2.[COL1] = t1.[COL1]
        AND t2.[COL2] = 'B'
    )
    

    【讨论】:

      【解决方案3】:
      ;WITH MyCTE AS
      (
          SELECT DISTINCT [COL1]
          FROM   [TABLE]
          WHERE  [COL2] = 'B'
      )
      SELECT DISTINCT [COL1]
      FROM   [TABLE]
      WHERE  [COL2] = 'A'
      AND    [COL1] NOT IN (SELECT [COL1] FROM MyCTE )
      

      【讨论】:

        猜你喜欢
        • 2013-02-28
        • 1970-01-01
        • 2019-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多