Tsql 基于多个条件查询多个具有列的表

Tsql 基于多个条件查询多个具有列的表,tsql,Tsql,我有三栏:船员信息、培训信息、职位信息。我试图创建一份报告,显示每个机组成员参加的某些培训的最新日期。每个培训都应该有自己的专栏,但有些培训只针对某些职位 我尝试过case语句,也尝试过在where语句中进行过滤,但不断出现错误。一些研究确实指出t SQL没有if语句,但一些人说它有 以下是有效的访问代码:压载水管理: Max(IIf([CURRENT_FLAG]=1 And [QUALIFICATION_ID] In (14800000086) And [CMC_POS_CODE_TRANSL

我有三栏:船员信息、培训信息、职位信息。我试图创建一份报告,显示每个机组成员参加的某些培训的最新日期。每个培训都应该有自己的专栏,但有些培训只针对某些职位

我尝试过case语句,也尝试过在where语句中进行过滤,但不断出现错误。一些研究确实指出t SQL没有if语句,但一些人说它有

以下是有效的访问代码:压载水管理:

Max(IIf([CURRENT_FLAG]=1 And [QUALIFICATION_ID] In (14800000086) And [CMC_POS_CODE_TRANSLATOR] In (1,3,6,8,12,13,15,18,20,25,32,90,91,92,94,96,98,100,102,103,230),[ISSUED_ON],IIf([CMC_POS_CODE_TRANSLATOR] Not In (1,3,6,8,12,13,15,18,20,25,32,90,91,92,94,96,98,100,102,103,230),"","0")))

我想显示的是机组成员完成培训的最新日期(如果需要),如果不需要,则显示空白,如果需要,则显示0。好的,您遇到的问题之一是,您基本上返回了三种数据类型:

  • 日期(甚至可能是日期时间)
  • 位(0/1)
  • 空字符串(VARCHAR)
所以你需要一些方法来处理这三个问题。我以为你会想要:

  • YYYYMMDD格式的日期,作为字符串
  • 0是“0”的字符串
  • 空字符串已经是一个字符串
因此,您的查询变成:

SELECT 
    MAX(
        CASE 
            WHEN [CURRENT_FLAG] = 1 
                AND [QUALIFICATION_ID] = 14800000086 
                AND [CMC_POS_CODE_TRANSLATOR] IN (1,3,6,8,12,13,15,18,20,25,32,90,91,92,94,96,98,100,102,103,230)
            THEN CONVERT(VARCHAR(8), [ISSUED_ON], 112)
        ELSE
            CASE 
                WHEN [CMC_POS_CODE_TRANSLATOR] NOT IN (1,3,6,8,12,13,15,18,20,25,32,90,91,92,94,96,98,100,102,103,230) 
                THEN ''
                ELSE '0'
            END
        END)
FROM
    MY_TABLE;
如果这不起作用,可能会有帮助的是向我们展示您尝试了什么,以及您得到的实际错误

此外,TSQL确实允许使用
IF
语句,但不允许在
SELECT
查询中使用。所以你可以这样做:

IF @my_dog_has_no_nose = 1
BEGIN
   SELECT 'how does he smell?' AS question;
ELSE
   SELECT NULL AS question;
END;

但是在
SELECT
语句中,您必须使用
CASE
来允许重定向。

欢迎使用stackoverflow。请花一分钟的时间,特别是。样本数据最好以+。请将您的问题包括在内,您当前的尝试和您想要的结果。关于更多细节,OP正在使用IIF,它是case语句的一种替代方案,可以在行中使用。我想你的数据类型返回假设是正确的。谢谢你,Richard,这是有道理的。我会试试看,然后告诉你。