【问题标题】:SQL - Group By DistinctSQL - 按不同分组
【发布时间】:2013-11-27 09:47:52
【问题描述】:
   row | P_NO | B_NAME
     1 | 123  | ABC ELEC
     2 | 123  | ABC ELEC
     3 | 123  | ABC ELEC
     4 | 123  | ABC TRANSPORT
     5 | 123  | ABC CONTRACTORS
     6 | 124  | ABC STATIONARY
     7 | 125  | ABC ELEC
     8 | 126  | ABC ELEC

我是 SQL 的新手。 如何仅选择 P_NO 和 B_NAME,其中一个 P_NO 出现多个 B_NAME。

输出应该只是前三行和第 4 行和第 5 行之一

SQL 服务器 2012

【问题讨论】:

  • 您的预期输出是什么?我的意思是你想如何确定要选择哪个 B_Name?
  • 输出应该是前三行和第 4 行和第 5 行之一

标签: sql sql-server group-by sql-server-2012


【解决方案1】:

试试这个...

SELECT 
  P_NO,
  B_NAME 
FROM
  table_name1 
WHERE P_NO IN 
  (SELECT 
    P_NO 
  FROM
    table_name1 
  GROUP BY P_NO 
  HAVING COUNT(P_NO) > 1)

【讨论】:

    【解决方案2】:

    [更新]

    你要找的是这个:

    select p_no
         , b_name
      from Uhura.dbo.test
     where p_no in (select p_no
                      from Uhura.dbo.test
                     group by
                           p_no
                    having count(distinct b_name) > 1)
     group by
           p_no
         , b_name
    

    它计算每个 p_no 的不同 b_name 的数量,并使用具有多个的 b_name 作为外部选择的过滤器。然后它通过分组消除重复项:

    【讨论】:

      【解决方案3】:

      尝试这样做:

      SELECT DISTINCT a.P_NO,a.B_NAME 
      FROM tab1 a
      INNER JOIN 
        (SELECT P_NO,B_NAME
         FROM tab1 
         GROUP BY P_NO,B_NAME
         HAVING COUNT(*) > 1
      ) b ON a.P_NO = b.P_NO
      

      sqlfiddle demo

      这将使用 SELECT 连接您的原始表,该 SELECT 只为您提供多次出现的 P_NO。

      【讨论】:

      • @user2955297。我编辑了我的答案。看看是不是你想要的。
      【解决方案4】:

      试试这个

      ;with TempData as (Select row ,P_NO,DataCount =ROW_NUMBER()
                          over(PARTITION By P_NO Order By B_NAME)
                          from YourTable )
      
      
      Select * 
      from YourTable
      where P_NO In (Select distinct P_NO from TempData where DataCount>1)
      

      Select distinct T.* 
      From YourTable T
          Inner Join TempData TD on T.P_NO=TD.P_NO
      Where TD.DataCount>1
      

      【讨论】:

      • @user2955297:更新了答案!!请立即尝试
      猜你喜欢
      • 2012-02-18
      • 2016-02-17
      • 2017-05-11
      • 1970-01-01
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      • 1970-01-01
      相关资源
      最近更新 更多