我认为我有一个简单的问题。我在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
答案 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)