选择另一列中同时具有NULL和Value(NOT NULL)的ID

时间:2016-04-08 07:00:21

标签: sql sql-server

如何选择在同一个表的不同列中同时具有NULLNOT NULL值的ID?

表:
    Col1 | Col2
   abc | NULL
    abc | 123
   bcd | 456

结果
    Col1 | Col2
   abc | NULL
    abc | 123

5 个答案:

答案 0 :(得分:1)

试试这个:

select Col1 
from mytable
group by Col1
having count(case when col1 is null then 1 end) > 0 and
       count(case when col1 is not null then 1 end) > 0

这将选择与Col1NULL NOT NULL值相关的col2值。

答案 1 :(得分:1)

我不确定你在问什么。

您是否希望相同行中的2个字段具有相同值的行,无论是否为NULL?

SELECT *
FROM SomeTable 
WHERE EXISTS (SELECT col1 INTERSECT SELECT col2)

SQLFiddle示例

或者,如果你想要"其他值存在于另一列中的任何行"

SELECT col1 FROM SomeTable
INTERSECT
SELECT col2 FROM SomeTable

SQLFiddle take 2

这两项都有效,因为INTERSECT在内部使用" IS"逻辑而不是" ="。
请参阅Paul White (SQLKiwi)了解更多

答案 2 :(得分:0)

您可以使用isnulll()函数。

像这样

where isnull(col1,0)=isnull(col2,0)

答案 3 :(得分:0)

请参阅,如果您在查询中使用标识列或使用row_number,则非常容易

Declare @table table (id int identity(1,1)
,Col1 varchar(50),Col2 varchar(50))
insert into @table
values
('abc', NULL )
,('abc', '123')
,('bcd' ,'456')


select a.col1,a.col2
from @table A
inner join @table b on a.col1=b.col1 and a.id<>b.id

OR

;with CTE as
(
select a.col1,a.col2,row_number()over(order by col1) rn
from @table A
)
select a.col1,a.col2
from CTE A
inner join CTE b on a.col1=b.col1 and a.rn<>b.rn

答案 4 :(得分:0)

声明@table表 (   col1 nvarchar(10),   col2整数  )  插入@table  (COL1)  值  ( 'ABC')

插入@table  (COL1,COL2)  值   ( 'ABC',123),  ( 'BCD',456)

从@table中选择col1,col2,其中col1在  (  选择col1  从  (  选择col1,     sum(col2为null,然后是1,0结束时的情况)为null,     sum(col2不为null,然后是1,0结束的情况)为notnulls   来自@table   按col1分组  )s  其中nulls&lt;&gt; 0和no​​tnulls&lt;&gt; 0 )