我在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
返回:
A B C D
1 a b c r
2 g b c r
3 n h f r
答案 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