如何选择在同一个表的不同列中同时具有NULL
和NOT NULL
值的ID?
表:
Col1 | Col2
abc | NULL
abc | 123
bcd | 456
结果
Col1 | Col2
abc | NULL
abc | 123
答案 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
这将选择与Col1
和NULL
NOT NULL
值相关的col2
值。
答案 1 :(得分:1)
我不确定你在问什么。
您是否希望相同行中的2个字段具有相同值的行,无论是否为NULL?
SELECT *
FROM SomeTable
WHERE EXISTS (SELECT col1 INTERSECT SELECT col2)
或者,如果你想要"其他值存在于另一列中的任何行"
SELECT col1 FROM SomeTable
INTERSECT
SELECT col2 FROM SomeTable
这两项都有效,因为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和notnulls&lt;&gt; 0 )