【发布时间】:2019-08-19 06:16:28
【问题描述】:
这是我的桌子:
DATE |BRANCH |DESC
2019-12-25 |ALL |Christmas Day
2019-12-25 |HO |Christmas Day
2019-12-25 |TES |Christmas Day
这是我的查询:
DECLARE
@APPTDATE Datetime = '2019-12-25',
@BRANCHCODE varchar(50) = 'HO'
SELECT *
FROM TABLE_NAME
WHERE CAST([DATE] AS DATE) = CAST(@APPTDATE AS DATE) AND ((BRANCH = @BRANCHCODE) OR (BRANCH != @BRANCHCODE AND BRANCH = 'ALL'))
结果:
DATE |BRANCH |DESC
2019-12-25 |ALL |Christmas Day
2019-12-25 |HO |Christmas Day
这是我想要的结果;
如果 ([BRANCH] = HO) 我只需要显示具有 [BRANCH] = "HO" 的 [DESC];
DATE |BRANCH |DESC
2019-12-25 |HO |Christmas Day
或者如果[BRANCH]的值在表中不存在但指定的日期在数据库中存在;
DATE |BRANCH |DESC
2019-12-25 |ALL |Christmas Day
编辑:
所以如果 BRANCH = HO 并且 DATE = '2019-12-25' 并且表格是:
DATE |BRANCH |DESC
2019-12-25 |ALL |Christmas Day (1)
2019-12-25 |TES |Christmas Day (2)
由于分支列表中不存在 HO 但日期确实存在,因此输出应为:
DATE |BRANCH |DESC
2019-12-25 |ALL |Christmas Day (1)
因为 ALL = 表示只要日期条件为真的任何分支。
是否可以使用我的 where 语句中的条件来实现结果,或者有更好的方法来执行这样的结果?
【问题讨论】:
-
这 3 个输入行的预期最终输出是什么?
-
因此,您希望表中的所有行分支为 HO 或提供的
@BRANCHCODE不存在于表中,对吗? -
@mkRabbani 第一个结果是错误的最后一个(2)是我想要的输出。
-
@Abra 是的先生,但我只需要单行结果。
标签: sql sql-server conditional-statements