Sql 分组个人的案例陈述返回错误答案

Sql 分组个人的案例陈述返回错误答案,sql,Sql,将Oracle sql转换为Tsql,这段代码最初是有发言权的,我的sql server studio认为这是错误的,所以我把它拿了出来——我觉得这应该行得通。它运行正常,但不管出生日期如何,它总是返回“18岁及以上”,这是不正确的。有人能告诉我我做错了什么吗 我确实试着把地板放回去,但它不喜欢 ,case when (cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int)) < 29 then '0 to 28 days' w

将Oracle sql转换为Tsql,这段代码最初是有发言权的,我的sql server studio认为这是错误的,所以我把它拿了出来——我觉得这应该行得通。它运行正常,但不管出生日期如何,它总是返回“18岁及以上”,这是不正确的。有人能告诉我我做错了什么吗

我确实试着把地板放回去,但它不喜欢

,case 

when (cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int))  < 29
    then '0 to 28 days' 
when (cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int)>=29 
    and cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int) <4 )
    then '29 days to 3 years' 
when (cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int)>=4 
    and cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int)<6 )
    then '4 to 5 years' 

when (cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int) >=6 
    and cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int) <11 )
    then '6 to 10 years'
when (cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int) >=11 
    and cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int) <14 )
    then '11 to 13 years' 

when ( cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int)>=14 
    and cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int) <18  )
    then '14 to 17 years' 
when cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int) >=18 
then '18 and above'     
else NULL
end age
,案例
何时(铸造(美联储ADT到达日期-帕特出生日期为int))<29
然后是“0到28天”
何时(cast(美联储ADT_抵达日期-帕特出生日期为整数)>=29
和cast(美联储ADT到达日期-帕特出生日期为整数)=4
和铸造(美联储ADT到达日期-帕特出生日期为整数)=6
和演员(美联储ADT到达日期-帕特出生日期为整数)=11
和演员(美联储ADT到达日期-帕特出生日期为整数)=14
和演员(美联储ADT到达日期-帕特出生日期为整数)=18
然后是‘18岁及以上’
否则无效
末日

我希望它能根据这些人到达时的年龄将他们分组,

如果我猜对了,您正在寻找两个日期之间的计算日期差异,其中考虑到MSSQL服务器存在一些语法问题。在MSSQL服务器中,您可以按如下方式计算日期差异-

CASE 
    WHEN DATEDIFF(DD,fed.ADT_ARRIVAL_date,pat.BIRTH_DATE) < 29
    -- Do not required CAST AS INT as it by default return INT
    .....
END
案例
日期差异(日、美联储日、抵达日、出生日)小于29时
--不需要强制转换为INT,因为它默认返回INT
.....
终止
你也有检查值的问题,因为我发现你检查的是相同的值>=29和<4!!这在任何时候都不可能是真的。另外,我对你的年龄分布感到困惑,因为你检查的所有值都在4到29之间。无论如何,我希望这些都是测试数据,你可以通过cor获得你想要的输出MSSQL服务器的rect-DATEDIFF方法。

TSQL确实有一个
floor()
函数。可能它需要不同的参数?我记不清了。如果在另一列中返回差值,就会得出结论,差值不是年。除了一个奇怪的情况外,
case
表达式不是问题所在。年龄的计算也比sub要复杂一些反正是牵引力。