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