返回分组,其中每组至少有一行满足条件SQL Server

时间:2017-06-20 14:13:27

标签: sql sql-server

我有一个表格(让我们称之为TableA)有多个列,Id是唯一的ID。

我只对三个感兴趣:A(int),B(int),C(varchar)。

最初我想要获取共享相同AB并返回至少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'

2 个答案:

答案 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');
相关问题