Sql 使用Case返回不同的查询集
我正在尝试创建一个T-SQL查询,它返回两个单独的查询(或者如果有更好的编写方法,我真的很想知道,而不必使用Sql 使用Case返回不同的查询集,sql,sql-server,tsql,subquery,case,Sql,Sql Server,Tsql,Subquery,Case,我正在尝试创建一个T-SQL查询,它返回两个单独的查询(或者如果有更好的编写方法,我真的很想知道,而不必使用CASE,那也很好!我很想知道!) 查询的简化准代码版本 DECLARE @ALob VARCHAR = 'Item1' /*Or User can write in 'All'*/ SELECT CASE WHEN @ALob='Item1' THEN (Select e.EventID, e.EventName, Count(*) Rows
CASE
,那也很好!我很想知道!)
查询的简化准代码版本
DECLARE @ALob VARCHAR = 'Item1' /*Or User can write in 'All'*/
SELECT
CASE WHEN @ALob='Item1' THEN
(Select e.EventID, e.EventName, Count(*) Rows
From tbl_Events e
Where BLob='Item1')
WHEN @ALob='All'THEN
(Select e.EventID, e.EventName, Count(*) Rows
From tbl_Events e) END
因此,用户几乎可以在DECLARE
部分中写入'ALL'或'Item1',并根据他们输入的内容显示第一个查询或第二个查询
现在需要注意的是,第二个查询没有Where BLob='Item1'
,这一点很重要,因为“All”选择中的Lob可以是任何内容—NULL、Item1、任意内容—我想调出所有内容
感谢您的帮助 您不能使用CASE/WHEN来控制执行流程。相反,您需要使用IF/THEN,如下所示:
DECLARE @ALob VARCHAR = 'Item1' /*Or User can write in 'All'*/
IF @ALob='Item1'
Begin
Select e.EventID, e.EventName, Count(*) Rows
From tbl_Events e
Where BLob='Item1'
End
Else If @ALob='All'
Begin
Select e.EventID, e.EventName, Count(*) Rows
From tbl_Events e
End
Else
Begin
Select 'Unrecognized selection'
End
嗯-老实说,我甚至不知道我可以使用IF/THEN语句-我会试试!嗯-看起来它成功运行了,但没有吐出任何实际信息-它只是读取“Command(s)completed successfully”(命令已成功完成)。如果您没有得到结果,可能是因为@ALob与Item1或所有项都不匹配。请检查我的编辑。这显示了如何为If/Then使用默认条件