0

我有一个包含两个字段的表 - ID1 和 ID2
ID1 可以为空,ID2 始终填充。

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

Coalesce 对我不起作用,因为 ID1 不为空。

所有的建议都收到了!

4

4 回答 4

2

取决于在这种情况下“空白”的确切含义,但如果空白仅表示空字符串或空格:

如果该列可能包含您仍希望将其视为空白的空格,请从 ID1 中删除空格:

LTRIM(ID1)

然后,NULL如果它等于空字符串,则可以通过执行以下操作:

NULLIF(TRIM(ID1), '')

然后你可以COALESCE()像这样使用 ID2 列:

COALESCE(NULLIF(TRIM(ID1), ''), ID2)

如果 ID1 始终是 'something' 或 '' (空字符串),那么您只需要NULLIF(ID1,'') 如果 ID1 = 空字符串将返回 NULL

原始响应,这是愚蠢的,因为它修剪了两次!

'[ID] = COALESCE(NULLIF(LTRIM(RTRIM(ID1)), ''), ID2)'

于 2012-06-26T11:44:34.633 回答
1

无论“空白”是什么意思,如果不是NULL,都可以用一个CASE条件表示:

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

ID1 = 'blank'你的情况在哪里。

于 2012-06-26T11:46:09.933 回答
1
select case when ID1 = '' then ID2 else ID1 end from MyTable;
于 2012-06-26T11:47:31.147 回答
0

你可以试试这样的CASE说法:

SELECT CASE ID1 = '' THEN ID2 ELSE ID1 END CASE FROM ...
于 2012-06-26T11:46:02.233 回答