2

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

4

2 回答 2

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.

于 2013-02-06T07:13:58.870 回答
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上的演示

于 2013-02-06T07:48:30.360 回答