我的sql结果中有A,B,C列。 B列可能有重复记录。为了避免重复的B值,我需要检查C中的值。如果列C的值为0,则只应在B中选择该特定行。
此处理仅适用于重复记录。
Column A | Column B | Column C
value 1 | value 2 | 1
value 3 | value 2 | 0
在上面的代码中只有行,值为3 |价值2 | 0,应在查询结果中选择
答案 0 :(得分:1)
试试这个:
SELECT
A, B, C
FROM
(
SELECT
ROW_NUMBER() OVER (PARTITION BY B ORDER BY CASE WHEN C = 0 THEN 0 ELSE 1 END) rn,
A, B, C
FROM Tbl
) A
WHERE rn = 1
如果C
的最小值为0,则可以ORDER BY
C
{/ 1}}。{/ p>
答案 1 :(得分:0)
还有一个选择
SELECT t1.ColumnA, t1.ColumnB, t1.ColumnC
FROM dbo.test32 t1
WHERE NOT EXISTS (
SELECT 1
FROM dbo.test32 t2
WHERE t2.ColumnB = t1.ColumnB
GROUP BY t2.ColumnB
HAVING COUNT(*) > 1 AND MAX(t2.ColumnC) = t1.ColumnC
)
SQLFiddle上的演示