2016-11-18 159 views
0

粘贴下面是使用在where子句中,但它抛出一个语法错误,说:“期待一个关键字像mrktng_pckge_typ_cd和NOT关键字之间END case语句的样本SQL代码CASE语句:Teradata的

CASE WHEN exc_ind=1 THEN mrktng_pckge_typ_cd NOT IN ('a','b','c','d') ELSE NULL END

+0

不知道你尝试什么来实现的,但我认为你再阻止你应该设置一个值。您的声明没有设置任何值。 –

回答

-1

您可能需要做这样我已经给不同的表名,但你可以做这样的逻辑:

Declare @condition as int = 1 
SELECT * 
FROM mstCity 
WHERE(([email protected] and Name IN (SELECT AliasCity.Name From mstCity AliasCity WHERE AliasCity.Name NOT IN ('USA','UK'))) OR 
     ([email protected] AND Name IN (SELECT AliasCity.Name From mstCity AliasCity )) 
    ) 

更新的答案,按您的查询应该是象下面这样:

WHERE ((exc_ind= 1 AND mrktng_pckge_typ_cd NOT IN ('a','b','c','d')) OR 
    (exc_ind <> 1 AND 1=1) 
) 
+0

谢谢你的答案Snehal但这段代码进入SQL宏,所以我不能在这里使用这个变量逻辑。其他解决方案? –

+0

你不需要用变量逻辑作为例子。在你的情况下,你必须在第一个条件中使用exc_ind = 1,在第二个条件中你必须写exc_ind <> 1 – Snehal

+0

向下投票(1)用SQL Server代码回答Teradata问题(2)给出完全不相关的代码作为参考3)“AND 1 = 1”。当真? –

5
where  exc_ind <> 1 
     or mrktng_pckge_typ_cd NOT IN ('a','b','c','d') 

如果exc_ind可以为空 -

where  coalesce (exc_ind,-1) <> 1 
     or mrktng_pckge_typ_cd NOT IN ('a','b','c','d') 

出于演示的目的:

where case when coalesce (exc_ind,-1) <> 1 or mrktng_pckge_typ_cd NOT IN ('a','b','c','d') then 1 else 0 end = 1 
+0

我需要第一个。情景是这样的,如果指标等于一个我不应该获取类型代码提到的值,如果指标不等于一个我需要所有的数据。这个检查应该发生在where子句。 –

+1

为了扩大优秀的答案,你不能把'case'和'where in'结合起来。你不得不使用动态sql,我不认为哪些宏不支持。所以你必须使用这个'或'逻辑。 – Andrew

+1

@Andrew,看到我更新的答案, –