它使用條件聚集和過度條款的一種方式做到:
創建和填充示例表(請保存我們這一步在你未來的問題)
DECLARE @T AS TABLE
(
uuid int,
pos char(1),
Number tinyint,
Account varchar(3),
xtype char(1)
)
INSERT INTO @T VALUES
(1, 'R', 1, 'abc', 'a'),
(1, 'S', 1, 'def', 'b'),
(1, 'N', 1, 'ghi', 'c'),
(1, 'R', 2, 'jkl', 'd'),
(2, 'R', 1, 'mno', 'e'),
(2, 'S', 1, 'pqr', 'f'),
(2, 'N', 1, 'stu', 'g'),
(3, 'R', 1, 'vwx', 'h'),
(3, 'S', 1, 'yz', 'i')
的CTE將包含列告訴我們,如果條件得到滿足:
;WITH CTE AS
(
SELECT uuId,
pos,
Number,
Account,
xtype,
SUM(CASE WHEN pos = 'R' AND Number > 1 THEN 1 ELSE 0 END) OVER(PARTITION BY uuId) As WrongR,
SUM(CASE WHEN pos = 'N' THEN 1 ELSE 0 END) OVER(PARTITION BY uuId) As NExists,
SUM(CASE WHEN pos = 'R' AND Number = 1 THEN 1 ELSE 0 END) OVER(PARTITION BY uuId) As RightR,
SUM(CASE WHEN pos = 'S' AND Number = 1 THEN 1 ELSE 0 END) OVER(PARTITION BY uuId) As RightS
FROM @T
)
查詢的CTE:
SELECT uuId,
pos,
Number,
Account,
xtype
FROM CTE
WHERE WrongR = 0
AND NExists = 0
AND RightR = 1
AND RightS = 1
結果:
uuId pos Number Account xtype
3 R 1 vwx h
3 S 1 yz i
你能發佈您正在查詢的查詢英? –
作爲DDL + DML的樣本數據和期望的結果將有助於回答這個(和任何其他)sql問題。另外,你正在使用哪個版本的sql server? –