查询服务器中两列至少匹配n次且有多个条件的所有行

时间:2018-10-18 08:01:25

标签: sql-server group-by sql-operations-studio

我在SQL Operations Studio(SQL Server)中有一个表,其中的列为A,B,C,D。我想用以下条件查询所有行:

使用示例数据编辑

   A    B    C    D
1  a    b    c    r
2  g    b    c    r
3  n    h    f    r
4  k    u    e    z
5  h    i    e    z
  1. 列C和D中的值至少匹配2次
  2. D列中的值必须至少出现3次

返回:

   A    B    C    D
1  a    b    c    r
2  g    b    c    r
3  n    h    f    r

1 个答案:

答案 0 :(得分:1)

在这里,一种简单的方法是使用带有两个count...over表达式的cte。

首先,创建并填充示例表(在您将来的问题中为我们保存此步骤)

DECLARE @T AS TABLE
(
    A char(1), 
    B char(1), 
    C char(1), 
    D char(1)
);    

INSERT INTO @T (A, B, C, D) VALUES
('a', 'b', 'c', 'r'),
('g', 'b', 'c', 'r'),
('n', 'h', 'f', 'r'),
('k', 'u', 'e', 'z'),
('h', 'i', 'e', 'z');

然后,CTE:

WITH cte AS
(
    SELECT A, B, C, D,
            COUNT(*) OVER(PARTITION BY C, D) As CDCount,
            COUNT(*) OVER(PARTITION BY D) As DCount
    FROM @T
)

查询:

SELECT A, B, C, D
FROM cte
WHERE CDCount >= 2     
AND DCount >= 3
ORDER BY A

结果:

A   B   C   D
a   b   c   r
g   b   c   r