这是我的桌子:
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 =表示只要日期条件为true的任何分支。
是否可以使用where语句中的条件获得结果?或者有更好的方法来执行这种结果?
答案 0 :(得分:1)
IF EXISTS (SELECT branch FROM table where branch = @BRANCHCODE)
BEGIN
SELECT * FROM table where branch = @branchcode
END
ELSE
BEGIN
SELECT * FROM table WHERE CAST([DATE] AS DATE) = CAST(@APPTDATE AS DATE)
END
这两个可能是解决方案。尚未在架构上对其进行测试。希望对您有所帮助。
SELECT * FROM Table
WHERE
1= CASE WHEN branch = @branchCode THEN 1
ELSE CASE WHEN CAST([DATE] AS DATE) = CAST(@APPTDATE AS DATE) AND branch != @branchcode THEN 1 ELSE 0 END END
答案 1 :(得分:1)
在两种情况下使用UNION ALL
:
DECLARE
@APPTDATE Datetime = '2019-12-25',
@BRANCHCODE varchar(50) = 'HO'
SELECT * FROM TABLE_NAME
WHERE [BRANCH] = @BRANCHCODE
UNION ALL
SELECT * FROM TABLE_NAME
WHERE CAST([DATE] AS DATE) = CAST(@APPTDATE AS DATE) AND [BRANCH] = 'ALL'
AND NOT EXISTS (
SELECT 1 FROM TABLE_NAME
WHERE [BRANCH] = @BRANCHCODE
)
请参见demo。
答案 2 :(得分:0)
您可以在脚本下方尝试此操作-
DECLARE @APPTDATE DATETIME= '2019-12-25',
@BRANCHCODE VARCHAR(50)= 'HO';
SELECT *
FROM TABLE_NAME
WHERE BRANCH = @BRANCHCODE
OR(
BRANCH <> @BRANCHCODE
AND CAST([DATE] AS DATE) = CAST(@APPTDATE AS DATE)
)
更新:
SELECT *
FROM your_table
WHERE BRANCH = @BRANCHCODE
OR(
BRANCH ='ALL'
AND CAST([DATE] AS DATE) = CAST(@APPTDATE AS DATE)
)