如何在CASE中使用此条件?

时间:2015-10-24 20:38:43

标签: sql-server tsql sql-server-2005

我想要Status列= 1

检查另一个表中是否有行返回'检查'如果没有行返回'在DB'

SELECT ID, UserName,
CASE [Status]
    WHEN 1 THEN
        if ((Select Count(*) From Logs_TB Where Logs_TB.UserName = Users_TB.UserName) > 0)
            'Check'
        Else
            'In DB'
    WHEN 2 THEN 'Revision'
    WHEN 3 THEN 'Sent'
END AS StatusName
FROM Users_TB CROSS JOIN Logs_TB

编辑1:

我有两张桌子

在第一张表中。 我想获得Column [Status]

的以下结果
if FirstTable.ColumnStatus = 1
   if SecondTable.ColumnA = FirstTable.ColumnB Has Rows
        'Check'
   else
        'In DB'
else if FirstTable.ColumnStatus = 2
   'Revision'
else if FirstTable.ColumnStatus = 3
   'Sent'

编辑2

enter image description here

这是一个例子

我希望从就业表中选择所有行

我希望将列状态解析为列为" StatusName"

如果Status = 1它有两个值

第一个值检查QualificationID和SpecializationID是否有行 在表'职位空缺'返回'检查'

如果表格中没有任何行'职位空缺'返回'在DB'

如果Status = 2' Revision'

如果状态= 3'已发送'

2 个答案:

答案 0 :(得分:3)

您需要更改案例并添加更多条件:

SELECT ID, UserName,
    CASE 
        WHEN [Status] = 1 
             AND EXISTS (SELECT 1
                         FROM Logs_TB
                         WHERE Logs_TB.UserName = Users_TB.UserName) THEN 'Check'
        WHEN [Status] = 1 THEN 'In DB' 
        WHEN [Status] = 2 THEN 'Revision' 
        WHEN [Status] = 3 THEN 'Sent' 
        ELSE NULL 
    END AS StatusName
FROM Users_TB
CROSS JOIN Logs_TB

出于性能原因,最好使用EXISTS而不是将COUNT与0进行比较。

答案 1 :(得分:0)

试试这个

504