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
答案 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的过滤器。然后通过分组来消除重复:
答案 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
这将使用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