Mud*_*san 1 sql t-sql sql-server sql-server-2005
我有一张如下表
No. FName Age Tag
1 abc 22 c
2 xyz 60 c
3 pqr 62 i
4 abc 22 i
5 abc 32 i
Run Code Online (Sandbox Code Playgroud)
我希望结果返回为
No. FName Age Tag
1 abc 22 c
2 xyz 60 c
3 pqr 62 i
5 abc 32 i
Run Code Online (Sandbox Code Playgroud)
要求是,如果一列Name 与列Age值相同的行用tag=c and tag=i,比tag=i排应该不会被选中.
排号 1和行号.4具有相同的值(Name,age)=(abc,22)但行4具有tag = i.
因此(abc,22,i),必须排除上面的第4行.我怎样才能做到这一点 ?
WITH records
AS
(
SELECT No, FName, Age, Tag,
ROW_NUMBER() OVER (PARTITION BY FName, Age
ORDER BY Tag ASC) rn
FROM tableName
WHERE TAG IN ('c','i')
)
SELECT No, FName, Age, Tag
FROM records
WHERE rn = 1
Run Code Online (Sandbox Code Playgroud)
如果您有其他特殊值TAG,
WITH records
AS
(
SELECT No, FName, Age, Tag,
ROW_NUMBER() OVER (PARTITION BY FName, Age
ORDER BY CASE WHEN TAG = 'c' THEN 0 ELSE 1 END ASC) rn
FROM tableName
WHERE TAG IN ('c','i')
)
SELECT No, FName, Age, Tag
FROM records
WHERE rn = 1
ORDER BY No
Run Code Online (Sandbox Code Playgroud)
更新1
SELECT Fname, Age, MIN(tag) Tag
FROM TableName
WHERE TAG IN ('c','i')
GROUP BY Fname, Age
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4170 次 |
| 最近记录: |