根据条件过滤Sql记录

时间:2013-02-06 07:05:37

标签: sql sql-server sql-server-2008

我的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,应在查询结果中选择

2 个答案:

答案 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上的演示

相关问题