sql 多 case 语句

标签 sql

嗨,我正在尝试编写多个 case 语句来预设作业的优先级。这涉及到一些表和 ID,但基本上我想检查工作是否存在,如果与它相关的问题 ID 是 80,然后有多个案例陈述,那么如果工作次要类别是 1,那么答案将是 High 的 id。到目前为止我所做的代码可能解释得更好......

 ALTER Procedure [dbo].[usp_CreatePresetPriority]
   @HelpdeskID int,
   @MinorCategoryID int
 As
 BEGIN

IF EXISTS(SELECT * FROM TicketInformation WHERE TicketID = @HelpdeskID AND QuestionID = 80)
    BEGIN
        UPDATE TicketInformation
        SET AnswerInput = Null, 
            AnswerID = CASE @MinorCategoryID WHEN 87 THEN 129 END
        WHERE TicketID = @HelpdeskID And QuestionID = 80

    END

ELSE
    BEGIN
        INSERT INTO TicketInformation (TicketID, QuestionID, AnswerID, AnswerInput)
        VALUES (@HelpdeskID, 80, CASE @MinorCategoryID WHEN 87 THEN 129 END, Null)
    END

所以这有效,但仅适用于一个选项 - 其中 @MinorCategoryID = 87 我想要有超过 1 个语句设置 @MinorCategoryID WHEN 91THEN 130 等...

我试过了...
    IF EXISTS(SELECT * FROM TicketInformation WHERE TicketID = @HelpdeskID AND QuestionID = 80)
 UPDATE TicketInformation SET AnswerInput = Null, AnswerID = CASE @MinorCategoryID WHEN 87 THEN 129 WHERE TicketID = @HelpdeskID And QuestionID = 80
ELSE INSERT INTO TicketInformation (TicketID, QuestionID, AnswerID, AnswerInput) VALUES (@HelpdeskID, 80, CASE @MinorCategoryID WHEN 87 THEN 129 END, Null)



     IF EXISTS(SELECT * FROM TicketInformation WHERE TicketID = @HelpdeskID AND QuestionID = 80)
 UPDATE TicketInformation SET AnswerInput = Null, AnswerID = CASE @MinorCategoryID WHEN 91 THEN 130 WHERE TicketID = @HelpdeskID And QuestionID = 80
ELSE INSERT INTO TicketInformation (TicketID, QuestionID, AnswerID, AnswerInput) VALUES (@HelpdeskID, 80, CASE @MinorCategoryID WHEN 91 THEN 130 END, Null)

任何帮助表示赞赏 - 对不起,如果不清楚我有一个星期五模糊的头!

最佳答案

您可以将它分配给一个变量,然后只需插入该变量。

ELSE
    BEGIN

        SELECT @MinorCategoryID = CASE
               WHEN @MinorCategoryID = 87 THEN 129
               WHEN @MinorCategoryID = 91 THEN 130
            -- more cases here
            ELSE NULL 
        END
        INSERT INTO TicketInformation (TicketID, QuestionID, AnswerID, AnswerInput)
        VALUES (@HelpdeskID, 80, @MinorCategoryID, Null)
    END

或通过选择更改 values()
ELSE
    BEGIN                
        INSERT TicketInformation (TicketID, QuestionID, AnswerID, AnswerInput)
        SELECT @HelpdeskID, 
               80, 
               CASE 
                   WHEN @MinorCategoryID = 87 THEN 129
                   WHEN @MinorCategoryID = 91 THEN 130
                   -- more cases here
                   ELSE NULL 
                END, 
                Null
    END

关于sql 多 case 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7123704/

相关文章:

php - 如何从 Laravel 中的 SQL 注入(inject)中保护此 sql 查询?

mysql - ' friend 的 friend 'SQL查询

sql - 在几列之间显示具有最大值的列名称

sql - 如何判断sql表是否是Temporal表?

sql - 如何优化这个查询?

Mysql 查询 : Display all unique IPs for a given user ID

mysql - SELECT/LOCATE 查询输出不正确的结果

c# - 在 sql 查询中使用 .net Datetime

Mysql查询以查找值随时间的百分比变化

sql - 将用户与过滤器配对