SQL显示重复字段但不是空字段

时间:2014-05-22 15:49:21

标签: sql sql-server

我认为我有一个简单的问题。我在sql Server中有一个表格:

Name :       Sum :     CNP

Andrey       100       120
Marius       20        100
George       20        200
Popescu      Nulled    300
Antal        Nulled    100

我使用此命令显示副本:

SELECT SUM, Name,CNP
FROM dbo.database
where SUM IN ( Select SUM from dbo.asigpag group by SUM HAVING Count(*)> 1) 

一切正常。

在本案例中:

Name :       Sum :     CNP

Marius       20        100
George       20        200
Popescu      Nulled    300
Antal        Nulled    100

This is the problem . I want to display duplicate but with not Nulled. 

我想在所有其他字段中显示这个,不仅仅是Sum。

Name :       Sum :     CNP

Marius       20        100
George       20        200

2 个答案:

答案 0 :(得分:1)

您需要添加另一个条件以排除sum字段中具有空值的记录:

SELECT SUM, Name,CNP
FROM dbo.database
where SUM IN ( Select SUM from dbo.asigpag group by SUM HAVING Count(*)> 1) 
AND SUM is not NULL

SQL Server将NULLS视为与值不同,因为它们根本没有任何值。他们的特殊情况需要使用[Field] IS NULL[Field] = NULL或其相反的方式进行选择,就像在这种情况下一样。

答案 1 :(得分:0)

在SQL NULL<>始终为NULL。您可以使用IS NULL或IS NOT NULL或预定义函数ISNULL(SUM,0) - 使用last语句将NULL值准备为默认值0。例如:

SELECT SUM, Name,CNP
FROM dbo.database
where ISNULL(SUM, 0) IN ( Select ISNULL(SUM, 0) from dbo.asigpag group by SUM HAVING Count(*) > 1) 

<强>更新

对不起,我误解了你想要的东西。为了消除列表中的NULL,您需要将子查询更新为:

Select SUM from dbo.asigpag where SUM IS NOT NULL group by SUM HAVING Count(*) > 1

整个查询将是:

SELECT SUM, Name, CNP
FROM dbo.database
where SUM IN ( Select SUM from dbo.asigpag Where SUM IS NOT NULL group by SUM HAVING Count(*) > 1)