我有下面的表格,需要将相同值与一个以上不同的groupID相关的那些记录划分。如果在同一groupID下重复相同的值,则不需要获取。
GroupId Value
11 AAA
11 AAA
11 BBB
22 AAA
22 CCC
22 CCC
33 AAA
33 DDD
33 BBB
我已经使用Count(*)
尝试了Having Count(*)>1
,但没有任何东西可以给我所需的输出
我需要的输出如下所示,在该输出中,它告诉相同的值与不同的GroupId
相关联。在这里,如果在同一 GroupId
中重复相同的值,我对此并不担心。我只需要一个以上GroupId
中可用的值。
所需的输出 -
Column Value GroupId
1 AAA 11
1 AAA 22
1 AAA 33
2 BBB 22
2 BBB 33
您可以尝试。
; WITH CTE AS (
SELECT DISTINCT GROUPID, VALUE FROM @TAB
)
, CT AS (
SELECT DENSE_RANK() OVER (PARTITION BY VALUE ORDER BY GROUPID, VALUE) AS SLNO, * FROM CTE
)
SELECT DENSE_RANK() OVER ( ORDER BY VALUE) AS [COLUMN], * FROM CTE
WHERE VALUE IN (SELECT VALUE FROM CT WHERE SLNO>1)
存在:
select distinct t.*
from tablename t
where exists (
select 1 from tablename
where value = t.value and groupid <> t.groupid
)
order by t.value, t.groupid
请参阅演示。
结果:
> GroupId | Value
> ------: | :----
> 11 | AAA
> 22 | AAA
> 33 | AAA
> 11 | BBB
> 33 | BBB