Sql 如何在查询中使用CASE表达式?

Sql 如何在查询中使用CASE表达式?,sql,sql-server,case,Sql,Sql Server,Case,当我想要执行我的case语句时,它会显示一些错误 我已经创建了一个人口统计查询。所以,我需要包括案例陈述 SELECT DISTINCT 'Age' DemographicGroup, CASE WHEN DATEDIFF(YY, DOB, @ReportDate) 25 THEN '=25' WHEN DATEDIFF(YY, DOB, @ReportDate) BETWEEN 25 AND 35 THEN '26-35' W

当我想要执行我的case语句时,它会显示一些错误

我已经创建了一个人口统计查询。所以,我需要包括案例陈述

SELECT DISTINCT
    'Age' DemographicGroup,
    CASE
        WHEN DATEDIFF(YY, DOB, @ReportDate) 25 THEN '=25' 
        WHEN DATEDIFF(YY, DOB, @ReportDate) BETWEEN 25 AND 35 THEN '26-35' 
        WHEN DATEDIFF(YY, DOB, @ReportDate) BETWEEN 36 AND 45 THEN '36-45' 
        WHEN DATEDIFF(YY, DOB, @ReportDate) 45 THEN '46+'
    END Label, 
    
    CASE
        WHEN DATEDIFF(YY, DOB, @ReportDate) 25 THEN 1 
        WHEN DATEDIFF(YY, DOB, @ReportDate) BETWEEN 25 AND 35 THEN 2 
        WHEN DATEDIFF(YY, DOB, @ReportDate) BETWEEN 36 AND 45 THEN 3 
        WHEN DATEDIFF(YY, DOB, @ReportDate) 45 THEN 4
    END GroupOrder
INTO
    #Demo2
FROM
    [dbo].[Dim_Borrower]
Msg 102,15级,状态1,第4行 “25”附近的语法不正确

Msg 102,15级,状态1,第7行 “Label”附近的语法不正确

Msg 102,15级,状态1,第11行 “GroupOrder”附近的语法不正确


您需要在WHEN表达式中使用比较运算符。比如=、等等

您还应添加一个显式ELSE案例,以避免意外的空输出:

您可以通过使用内部查询并使用更简单的CASE xpr WHEN val而不是较长的CASE WHEN expr形式来简化此过程,以减少重复代码


您需要在WHEN表达式中使用比较运算符。比如=、等等

您还应添加一个显式ELSE案例,以避免意外的空输出:

您可以通过使用内部查询并使用更简单的CASE xpr WHEN val而不是较长的CASE WHEN expr形式来简化此过程,以减少重复代码


申请的理由。你也不必因为这种情况


申请的理由。你也不必因为这种情况


我不明白你为什么指的是任何一张桌子。为什么不使用一个具有所需值的派生表呢

select 'Age' as DemographicGroup,
into #Demo2
from (values (1, '=25'),
             (2, '26-35'),
             (3, '36-45'),
             (4, '46+')
     ) v(Label, GroupOrder);
这确保所有值都进入表中,而不管Dim_借款人是否拥有这些值

我还将包括年龄范围的下限和上限,以便将其与其他数据结合起来:

select 'Age' as DemographicGroup,
into #Demo2
from (values (1, '=25', 25, 25),
             (2, '26-35', 26, 35),
             (3, '36-45', 36, 45),
             (4, '46+', 46, NULL)
     ) v(Label, GroupOrder, LowerAge, UpperAge);

我不明白你为什么指的是任何一张桌子。为什么不使用一个具有所需值的派生表呢

select 'Age' as DemographicGroup,
into #Demo2
from (values (1, '=25'),
             (2, '26-35'),
             (3, '36-45'),
             (4, '46+')
     ) v(Label, GroupOrder);
这确保所有值都进入表中,而不管Dim_借款人是否拥有这些值

我还将包括年龄范围的下限和上限,以便将其与其他数据结合起来:

select 'Age' as DemographicGroup,
into #Demo2
from (values (1, '=25', 25, 25),
             (2, '26-35', 26, 35),
             (3, '36-45', 36, 45),
             (4, '46+', 46, NULL)
     ) v(Label, GroupOrder, LowerAge, UpperAge);

谢谢你的帮助。我真的很感谢你们,谢谢你们的帮助。我真的很感激你们。
select 'Age' as DemographicGroup,
into #Demo2
from (values (1, '=25', 25, 25),
             (2, '26-35', 26, 35),
             (3, '36-45', 36, 45),
             (4, '46+', 46, NULL)
     ) v(Label, GroupOrder, LowerAge, UpperAge);