【问题标题】:Select records where all rows have same value in two columns选择所有行在两列中具有相同值的记录
【发布时间】:2013-11-10 23:15:50
【问题描述】:

这是我的示例表

Col1   Col2
 A      1
 B      1
 A      1
 B      2
 C      3

我希望能够选择所有行在 Col1 和 Col2 中具有相同值的不同记录。所以我的答案应该是

Col1   Col2
 A      1
 C      3

我试过了

SELECT Col1, Col2 FROM Table GROUP BY Col1, Col2

这给了我

Col1   Col2
 A       1
 B       1
 B       2
 C       3

这不是我想要的结果。任何提示将不胜感激。

【问题讨论】:

  • 你想要的输出是什么?
  • 您只是想抓取 Col1 = A 且 Col2 = 1 的行吗?
  • @eteich - 不。我已经编辑了我的问题以使其更清楚

标签: sql sql-server-2008


【解决方案1】:

试试这个:

SELECT col1, MAX(col2) aCol2 FROM t
GROUP BY col1
HAVING COUNT(DISTINCT col2) = 1

输出:

| COL1 | ACOL2 |
|------|-------|
|    A |     1 |
|    C |     3 |

小提琴here.

基本上,这确保col2 的不同值对于给定的col1 是唯一的。

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT * FROM MYTABLE
    GROUP BY Col1, Col2
    HAVING COUNT(*)>1
    

    例如 SQLFiddle here

    【讨论】:

      【解决方案3】:

      您可以尝试以下任一方法 -

      select col1, col2 from 
      (             
      select 'A'    Col1 ,   1 Col2
      from dual
      union all 
      select 'B'      , 1
      from dual
      union all
      select 'A'       ,1
      from dual
      union all
      select 'B'       ,2
      from dual
      )
      group by col1, col2
      having count(*) >1;
      

      select col1, col2
      from
      ( 
          select col1, col2, row_number() over (partition by col1, col2 order by col1, col2) cnt 
          from 
              (             
              select 'A'    Col1 ,   1 Col2
              from dual
              union all 
              select 'B'      , 1
              from dual
              union all
              select 'A'       ,1
              from dual
              union all
              select 'B'       ,2
              from dual
              )
      )
      where cnt>1;
      

      【讨论】:

      • 问题标记为 SQL Server - 这是一个 Oracle 解决方案(使用双表)
      • 我将其用于测试目的,因为我没有包含这些值的表格。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-14
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 2023-01-09
      相关资源
      最近更新 更多