根据多个条件用列查询多个表

时间:2019-05-20 19:30:38

标签: tsql

我有三列:机组人员信息,培训信息,职位信息。我正在尝试创建一个报告,以显示每位机组人员接受的某些培训的最新日期。每次培训都应该有自己的专栏,但仅某些职位需要进行某些培训。

我尝试了一个case语句语句以及仅在where语句中进行过滤,但一直出错。某些研究确实说t SQL没有if语句,但是有些人说有。

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

['item22', 'item23', 'item03', 'item4', 'item5']

我想要显示的是机组人员完成培训的最新日期(如果需要),如果不需要,则显示空白,如果不需要,则显示0。

>

1 个答案:

答案 0 :(得分:1)

好的,您遇到的问题之一就是您实际上要返回三种数据类型:

  • 日期(甚至可能是日期时间);
  • BIT(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来允许重定向。