我几乎不知道如何让它工作。我已经好几年没有真正使用sql了,所以有很多我不记得了。
所以我想这样:
我返回表中代码字段的值为1208且estnumber=1187216的行
对所选内容运行计数,如果为0,则运行子查询
如果>0,则运行其他子查询
我还没有进入子查询部分,因为我根本无法让它正常工作。现在我只想让它返回文本。
这是最新的尝试,我实际上在使用db2,但也许我们现在可以忽略这一点,稍后我会解决这一部分,因为它说明语法不正确,但其他验证器不同意(如果您对db2一无所知,请在给出建议时使用标准sql)
SELECT
count(*) AS t
FROM
table
WHERE
(
ESTNUMBER = 1187216
AND CODE = 1208
)
AND CASE WHEN t = 0 THEN 'it is zero' ELSE 'it is not zero' END;
3条答案
按热度按时间km0tfn4u1#
你想这样做吗?
这假设子查询返回的列是兼容的(相同的数目,相同的类型)。
有更好的方法来编写这个查询(特别是使用
EXISTS
以及NOT EXISTS
),但这与你提问的方式完全一致。xxe27gdn2#
字符串值应该出现在select子句中,而不是where筛选器中。
3z6pesqy3#
你像一个命令式的程序员,而不是一个声明式的。也就是说,sql没有顺序执行:要么全部执行,要么什么都不执行。
所以,这是一个开始,有效的一点:
现在,为了检查count()的值,您现在知道where将不起作用。那是因为count是一个聚合函数。为了观察这种函数的结果,你使用having。
为了使您的案例有效,您可以将其移动到可以获得count()结果的区域:
请注意,“t”是您给出count(*)结果的别名。在大多数sql实现中,该别名不能在语句的其余部分使用。
现在,对于非此即彼的事情,是时候重新考虑你的方法和你真正想要的了。您可能最终会在语句中包含这两个结果集,并选择如何提供结果。
比如:
希望这有帮助。