SQL - Group By Distinct

时间:2013-11-27 09:47:53

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

   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的新手。 如何选择仅针对多个B_NAME显示一个P_NO的P_NO和B_NAME。

输出应该只是前三行中的一行,第4行和第5行

SQL SERVER 2012

4 个答案:

答案 0 :(得分:3)

试试这个......

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)

答案 1 :(得分:1)

[更新]

你在寻找的是:

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的数量,并使用具有多个p_no的那些作为外部select的过滤器。然后通过分组来消除重复:

enter image description here

答案 2 :(得分:0)

尝试这样做:

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连接原始表格,只为您提供不止一次出现的P_NO。

答案 3 :(得分:0)

试试这个

;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