2012-06-26 69 views
0

我有一个表有两个字段 - ID1和ID2
ID1可以是空白的,ID2总是被填充。SQL查看从两个字段中选择数据并合并为一个

我想创建一个包含一个字段的视图。这个字段将是来自ID2的数据,除非ID1具有在这种情况下我需要它为ID1的值。

由于ID1不为空,合并对我无效。

所有建议大大收到!

回答

1

无论“空白”的意思,如果不是NULL,可以在CASE条件表示:

CASE WHEN ID1 = 'blank' THEN ID2 ELSE ID1 END 

哪里ID1 = 'blank'是世界卫生大会改变你的状况。

+0

CASE似乎最适合我 - 非常感谢所有答复! – user1482435

+0

既然这是可以接受的答案,我认为值得再强调的一点是,如果ID1为NULL,那么你会在这里得到NULL,除非你添加OR ID1 IS NULL – Treborbob

+0

但是这个问题包含了短语“ID1不为空” - OP已明确排除了“NULL”情况。 –

2

根据究竟是什么“空白”意味着在这种情况下,但如果空白意味着空字符串或只有空白:

从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)'

+0

+1,但在这种情况下不需要'LTRIM(RTRIM(...))'。 –

+0

TY @Andriy M - 我只是不确定是否空白=='',或者它可能是'_'或'__'(其中_代表空格)啊是的,我确实在那里失败了,当然你如果整个字符串是空格,则只需要一个TRIM。 – Treborbob

+0

哎呀,我的坏,我应该更具体。我的意思是你根本不需要修剪弦乐。即使它是一系列空格,它仍然会匹配空字符串。 [这是插图。](http://sqlfiddle.com/#!3/d41d8/2157) –

0

你可以尝试CASE声明:

SELECT CASE ID1 = '' THEN ID2 ELSE ID1 END CASE FROM ... 
1
select case when ID1 = '' then ID2 else ID1 end from MyTable;