我有一个包含多个列的表。相关列是S和B.
S | B ------- s1 | b1 s2 | b1 s3 | b2 s4 | b3 s5 | b4 s6 | b4 s7 | b5 s7 | b6 s7 | b7 s8 | b7
我想获得映射到相同B值的所有S值的列表,然后计算唯一的B值:因此上表中的结果将如下所示,并且唯一B值的计数将是3(b1,b4和b7)
S | B ------- s1 | b1 s2 | b1 s5 | b4 s6 | b4 s7 | b7 s8 | b7
为了通过列出重复的B值来解决问题,我遇到了有助于查找重复项的查询,但这并不是我需要的。
有人可以帮忙吗?
答案 0 :(得分:0)
首先,我将生成一组数据,每个数据具有每个S的不同计数,然后再连接回源表中的基本数据集,并按计数限制> 1从内联视图。
SELECT Z.S, Z.B
FROM Table Z
INNER JOIN (
SELECT count(Distinct S) cnt, B
FROM table
GROUP BY B) Y
on Z.B = Y.B
Where Y.cnt > 1
答案 1 :(得分:0)
假设使用SQL-Server,您可以使用Over
-clause:
WITH CTE AS
(
SELECT S, B, COUNT(*)OVER(PARTITION BY B) AS CntB
FROM TableName
)
SELECT S, B
FROM CTE
WHERE CntB > 1
;
WITH CTE AS
(
SELECT S, B, COUNT(*)OVER(PARTITION BY B) AS CntB
FROM TableName
)
SELECT CntUniqueB = (SELECT COUNT(DISTINCT B)
FROM CTE
WHERE CntB > 1)