tsql - 关键字 'IF'附近的语法不正确,如果在WITH之后

标签 tsql if-statement stored-procedures syntax-error

我正在尝试在IF之后制作一个WITH,它给我错误Incorrect syntax near the keyword 'IF'
下面是我正在编写的存储过程的示例

CREATE PROCEDURE [dbo].[Proc_MyProc]
@MODE INT = null
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

WITH ss as (
    select col1, col2, col3, col4, col5
    from TableTest
)

IF @MODE = 1
    select col1 as A, col2, sum(col5) as col5sum
    from ss
    group by col1, col2
    order by col5sum desc
ELSE IF @MODE = 2
    select col1, col2, sum(col5) as col5sum
    from ss
    group by col1, col2, col3
    order by col5sum desc
ELSE IF @MODE = 3
    select col1, col2, sum(col5) as col5sum
    from ss
    group by col1, col2, col4
    order by col5sum desc

END

GO

我试图删除WITH并且语法错误消失了,但是当然这不是解决方案

谢谢 :)

最佳答案

WITHSELECT一起使用,因此您需要重复WITH或使用临时表。

不过,在这种情况下,WITH实际上没有任何值(value)-让我假设它是简化的。

第一种方法是:

if @MODE = 1
    with ss as (
          select col1, col2, col3, col4, col5
          from TableTest
         )
    select col1 as A, col2, sum(col5) as col3sum
    from #ss
    group by col1, col2
    having SnQuantity > 0
    order by availability desc;
. . . 

第二种方法是:
select col1, col2, col3, col4, col5
into #ss
from TableTest;

if @MODE = 1
    select col1 as A, col2, sum(col5) as col3sum
    from #ss
    group by col1, col2
    having SnQuantity > 0
    order by availability desc;
. . . 

关于tsql - 关键字 'IF'附近的语法不正确,如果在WITH之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50927029/

相关文章:

sql - 多语句表值函数与内联表值函数

SQL- 七日周报(星期日至星期六)

C++:检查对象是否为非空以便使用 cout 索引每个输出

python - 从 SqlAlchemy 调用 MSSQL 存储过程

c# - 以动态/编程方式将 WHERE 子句添加到 SQL

mysql - 存储过程 MySql 中的疑问 - 如何为变量返回多个值?

sql-server - SQL Server CHOOSE() 函数与 RAND() 函数的行为异常

sql-server - UNION ALL 在每个表中具有不同列数的 3 个表上 - 如何有效地这样做

list - Makefile - 遍历列表并选择特定值

Python if 语句总是打印不正确