Sql server 我如何在案例中使用此条件?

Sql server 我如何在案例中使用此条件?,sql-server,tsql,sql-server-2005,Sql Server,Tsql,Sql Server 2005,如果状态列=1,则我需要 检查另一个表中是否有行返回“Check”,如果没有行返回“in 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'

如果状态列=1,则我需要

检查另一个表中是否有行返回“Check”,如果没有行返回“in 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:

我有两张桌子

在第一桌。 我希望得到[状态]列的以下结果

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

这是一个例子

我想从就业表中选择所有行

我想将列Status解析为列StatusName

如果Status=1,它有两个值

首先检查QualificationID和SpecializationID是否有行 在“空缺”表中,返回“支票”

如果“空缺”表中没有行,则返回“在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
如果状态=2“修订”


如果状态=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,而不是将计数与0进行比较。

尝试此方法

DECLARE @Cnt INT 
SELECT @Cnt = COUNT(*) 
FROM Logs_TB 
WHERE Logs_TB.UserName = Users_TB.UserName 

SELECT 
       ID 
      ,UserName
       ,CASE WHEN [Status] = 1 
              THEN 
                    CASE WHEN @Cnt > 0 
                        THEN 'Check' 
                        ELSE 'In DB' 
                    END 
                WHEN [Status] = 2 THEN 'Revision' 
                WHEN [Status] = 3 THEN 'Sent' 
          END AS StatusName 
FROM Users_TB 
CROSS JOIN Logs_TB 

如果您使用的是2012+,请添加另一个嵌套案例或IIF。此外,存在最佳检查,而不是计数>0我想将此作为答案发布,但它将是注释。当[Status]=1且存在时,您需要更高级的case,而不是COUNT>0选择ID、用户名、case,当[Status]=1且存在时,从日志中选择1,其中Logs\u TB.UserName=Users\u TB.UserName,然后当[Status]=1时“检查”,然后当[Status]=2时“在DB中”,然后当[Status]时选择“修订”=3然后“发送”否则NULL END作为用户的StatusName\u TB交叉连接日志\u TBSo您需要case THEN。Martin Smith。。。我试着使用嵌套,但我不能正确地使用它。实际上,你能给我们展示完整的示例数据和期望的结果吗?两个表的交叉连接和涉及相同两个表的相关子查询在我看来很奇怪。也许有一种更简单的方法可以使用完全外部连接或其他什么。@RickySuhendar如果有帮助,请告诉我。如果您共享示例数据和所需的输出,那就太好了。我想检查每一行的条件,其中当前行的Logs\u TB.UserName=Users\u TB.UserName。。。请参见上文中的编辑2