0

我在 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
4

1 回答 1

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
于 2018-10-18T08:10:52.307 回答