我有一个表有两个字段 - ID1和ID2
ID1可以是空白的,ID2总是被填充。SQL查看从两个字段中选择数据并合并为一个
我想创建一个包含一个字段的视图。这个字段将是来自ID2的数据,除非ID1具有在这种情况下我需要它为ID1的值。
由于ID1不为空,合并对我无效。
所有建议大大收到!
我有一个表有两个字段 - ID1和ID2
ID1可以是空白的,ID2总是被填充。SQL查看从两个字段中选择数据并合并为一个
我想创建一个包含一个字段的视图。这个字段将是来自ID2的数据,除非ID1具有在这种情况下我需要它为ID1的值。
由于ID1不为空,合并对我无效。
所有建议大大收到!
无论“空白”的意思,如果不是NULL
,可以在CASE
条件表示:
CASE WHEN ID1 = 'blank' THEN ID2 ELSE ID1 END
哪里ID1 = 'blank'
是世界卫生大会改变你的状况。
根据究竟是什么“空白”意味着在这种情况下,但如果空白意味着空字符串或只有空白:
从ID1中的空格,如果有可能该列包含您想还是把空白空白这样做:
LTRIM(ID1)
然后你可以把它NULL
,如果它这样做等于空字符串:
NULLIF(TRIM(ID1), '')
然后你可以COALESCE()
,与ID2列如下:
COALESCE(NULLIF(TRIM(ID1), ''), ID2)
如果ID1始终是“东西”或“”(空字符串),那么你只需要NULLIF(ID1,'')
将返回NULL,如果ID1 =空字符串
原创反应,这是微妙的,因为它修剪两次!
'[ID] = COALESCE(NULLIF(LTRIM(RTRIM(ID1)), ''),ID2)'
+1,但在这种情况下不需要'LTRIM(RTRIM(...))'。 –
TY @Andriy M - 我只是不确定是否空白=='',或者它可能是'_'或'__'(其中_代表空格)啊是的,我确实在那里失败了,当然你如果整个字符串是空格,则只需要一个TRIM。 – Treborbob
哎呀,我的坏,我应该更具体。我的意思是你根本不需要修剪弦乐。即使它是一系列空格,它仍然会匹配空字符串。 [这是插图。](http://sqlfiddle.com/#!3/d41d8/2157) –
你可以尝试CASE
声明:
SELECT CASE ID1 = '' THEN ID2 ELSE ID1 END CASE FROM ...
select case when ID1 = '' then ID2 else ID1 end from MyTable;
CASE似乎最适合我 - 非常感谢所有答复! – user1482435
既然这是可以接受的答案,我认为值得再强调的一点是,如果ID1为NULL,那么你会在这里得到NULL,除非你添加OR ID1 IS NULL – Treborbob
但是这个问题包含了短语“ID1不为空” - OP已明确排除了“NULL”情况。 –