我有一个表格(让我们称之为TableA
)有多个列,Id
是唯一的ID。
我只对三个感兴趣:A
(int),B
(int),C
(varchar)。
最初我想要获取共享相同A
和B
并返回至少2行的行。
; WITH CTE AS (
SELECT tbl.A, tbl.B
FROM [dbo].[TableA] tbl
/* WHERE irrelevant filter here */
GROUP BY tbl.A, tbl.B
HAVING COUNT(1) > 1
)
从现在开始,我想返回此CTE中标识的分组,其中每个分组中至少有一行将C
列设置为'ThisValue'
。
答案 0 :(得分:3)
使用sum和case来计算具有' ThisValue'
的记录; WITH CTE AS (
SELECT tbl.A, tbl.B
FROM [dbo].[TableA] tbl
/* WHERE irrelevant filter here */
GROUP BY tbl.A, tbl.B
HAVING COUNT(1) > 1 and sum(case tbl.C when 'ThisValue' then 1 else 0 end)>0
)
答案 1 :(得分:0)
例如,您可以使用EXISTS运算符。
; WITH CTE AS (
SELECT tbl.A, tbl.B
FROM [dbo].[TableA] tbl
/* WHERE irrelevant filter here */
GROUP BY tbl.A, tbl.B
HAVING COUNT(1) > 1
)
SELECT * FROM CTE
WHERE EXISTS (SELECT 1 FROM [dbo].[TableA] tc
WHERE tc.A=CTE.A AND tc.B=CTE.B AND tc.C='ThisValue');