2013-02-06 105 views
2

我在我的sql结果中有列A,B,C。 B列可能有重复的记录。为了避免重复的B值,我需要检查C中的值。如果C列的值为0,那么只应在B中选择特定的行。根据条件筛选Mssql记录

这种处理只应对重复记录进行。

Column A | Column B | Column C 

value 1 | value 2 | 1 

value 3 | value 2 | 0 

在上面的代码中只有row,value 3 |值2 | 0,应在查询结果

+1

展示样本,请,文字不说清楚... –

+0

确定。那么,你在哪里编码和努力?你有什么尝试? – Raj

回答

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

你领先于我:),附上小提琴[链接](http://sqlfiddle.com/#!3/2f221/2) –

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