SELECT
Siren,
CASE WHEN Code_Juridique LIKE 'M%' AND Enseigne IS NOT NULL AND Enseigne <> '' --ok
THEN 'Enseigne : ' + Enseigne
WHEN (Sigle IS NULL OR Sigle ='')
AND (Enseigne IS NULL OR Enseigne ='')
THEN '' -- ok
WHEN
(Sigle IS NOT NULL OR Sigle <> '' ) THEN 'Sigle : ' + Sigle
ELSE 'Sigle / Enseigne : ' + Sigle + ' / ' + Enseigne
END as SigleEnseigne1,
Sigle,
Enseigne,
Code_Juridique
FROM #JohnJack
代码很简单。
问题在于第三个when
,如下所示
我的第4和第5行应该没有任何内容,但却给了我Sigle :
我想要的是让第4行和第5行的列SigleEnseigne1
为空
感谢您的见解
答案 0 :(得分:3)
试试这个:
SELECT
Siren,
CASE WHEN ( Code_Juridique LIKE 'M%' ) AND ( IsNull( Enseigne, '' ) <> '' )
THEN 'Enseigne : ' + Enseigne
WHEN ( IsNull( RTrim(LTrim(Sigle)), '') = '') AND ( IsNull( Enseigne, '' ) = '')
THEN '' -- ok
WHEN ( IsNull( RTrim(LTrim(Sigle)), '' ) <> '' )
THEN 'Sigle : ' + RTrim(LTrim(Sigle))
ELSE
'Sigle / Enseigne : ' + IsNull( RTrim(LTrim(Sigle)), '' ) + ' / ' + Enseigne
END as SigleEnseigne1,
Sigle,
Enseigne,
Code_Juridique
FROM #JohnJack
答案 1 :(得分:2)
除了明确指出(TRUE OR FALSE) = TRUE
我会使用ISNULL()
和LEN()
来简化和防范代码。
SELECT
Siren,
CASE WHEN Code_Juridique LIKE 'M%' AND LEN(ISNULL(Enseigne,'')) > 0 --ok
THEN 'Enseigne : ' + Enseigne
WHEN (LEN(ISNULL(Sigle, '')) = 0)
AND (LEN(ISNULL(Enseigne, '')) = 0)
THEN '' -- ok
WHEN
LEN(ISNULL(Sigle, '')) > 0 THEN 'Sigle : ' + Sigle
ELSE 'Sigle / Enseigne : ' + ISNULL(Sigle, '') + ' / ' + ISNULL(Enseigne, '')
END as SigleEnseigne1,
Sigle,
Enseigne,
Code_Juridique
FROM #JohnJack
如果这些字段包含空格,您的代码会如何反应? LEN
会自动修剪尾随空格。
答案 2 :(得分:1)
此行导致您的问题:
(Sigle IS NOT NULL OR Sigle <> '' ) THEN 'Sigle : ' + Sigle
...但这只是显而易见的,因为你声明你不想要这个结果。除此之外,代码按预期行事。
最简单的解决方案是取出:
'Sigle : ' + Sigle
但这可能是也可能不是您正在寻找的。基于给定的信息,它是解决方案,但没有大量的信息可以解决
如果您要尝试打印非空值,则它应该是AND而不是OR。当你使用OR时,如果EITHER条件为真,它将返回true。
答案 3 :(得分:1)
我不确定你为什么要这个when
WHEN (Sigle IS NULL OR Sigle = '')
AND (Enseigne IS NULL OR Enseigne ='')
THEN '' -- ok
正如您想要的那样SigleEnseigne1为NULL
或''
当Sigle为NULL
或''
时,您需要此when
代替
WHEN (Sigle IS NULL OR Sigle = '') THEN ''
还有一个问题,Sigle不是空字符串并且有空格。您可以使用LTRIM()
和RTRIM()
函数
答案 4 :(得分:0)
我花了整个周末,但实际上,我发现了我的错误。
抱歉这个烂摊子
答案如下:
SELECT
Siren,
CASE WHEN ( Code_Juridique LIKE 'M%' ) AND ( IsNull( Enseigne, '' ) <> '' )
THEN 'Enseigne : ' + Enseigne
WHEN ( IsNull( RTrim(LTrim(Sigle)), '') = '') AND ( IsNull( Enseigne, '' ) = '')
THEN '' -- ok
WHEN (Sigle IS NOT NULL OR Sigle <> '') AND (Enseigne IS NULL OR Enseigne = '')
THEN 'Sigle : ' + RTrim(LTrim(Sigle))
WHEN (Sigle IS NULL OR Sigle = '') AND (Enseigne IS NOT NULL OR Enseigne <> '')
THEN ''
WHEN
(Sigle IS NOT NULL OR Sigle <> '') AND (Enseigne IS NOT NULL OR Enseigne <> '')
THEN 'Sigle / Enseigne : ' + IsNull( RTrim(LTrim(Sigle)), '' ) + ' / ' + Enseigne
END as SigleEnseigne1
FROM John_Jack
今年结束了