【问题标题】:Unexpected Result with Case When statementCase When 语句的意外结果
【发布时间】:2019-03-27 11:31:02
【问题描述】:

这种情况在我的查询中返回意外结果。基本上,如果资金(Sub Query Case When)低于 3000,则值应为 3000。它返回 0,我知道这似乎是一个愚蠢的问题,但我真的坚持这个问题。

我试过自己执行查询,它仍然返回 0。我也试过不带文字。

SELECT 
Tax + StudentLoans AS 'Net Income Tax',
GrossNI,
CASE WHEN ed.EA_Indicator_CY = '0' THEN '0' ELSE 
(SELECT CASE WHEN SUM(Funding) > '3000' THEN '0' ELSE '3000' END FROM 
PayrollRuns) END AS 'Employment Allowance',
SMP AS 'SMP Recovered',
NICompOnSMP AS 'SMP Comp',
SPPA + SPPB AS 'SPP Recovered',
SPPACompensation + SPPBCompensation AS 'SPP COMP',
SAP AS 'SAP Recovered',
SAPCompensation,
SHPP_A + SHPP_B AS 'Shpp Recovered',
SHPP_A_Compensation + SHPP_B_Compensation AS 'ShPP Comp',
Apprenticeship_Levy_Due AS 'App Levy'
FROM PayrollRuns pr
CROSS JOIN [Employer Details] ed
WHERE RunID = '1058'
GROUP BY Tax, StudentLoans, GrossNI, SMP, NICompOnSMP, ed.EA_Indicator_CY, 
SPPACompensation, SPPBCompensation, SAPCompensation, SHPP_A_Compensation, 
SHPP_B_Compensation, SPPA, SPPB, SAP, Apprenticeship_Levy_Due, SHPP_A, 
SHPP_B

此示例的就业津贴列应返回 3000,但返回为 0。任何帮助将不胜感激。

【问题讨论】:

  • 子查询 SUM(Funding) 的值是多少?
  • @Chanukya SUM(资金)= 0
  • 我认为它应该是一个数字而不是一个字符串..
  • 我认为这是因为 EA_Indicator_CY 为 0

标签: sql sql-server case


【解决方案1】:

你应该使用数字而不是字符串

SELECT 
    Tax + StudentLoans AS 'Net Income Tax',
    GrossNI,
    CASE WHEN ed.EA_Indicator_CY = 0 THEN 0 ELSE 
    ( CASE WHEN  (SELECT  SUM(Funding) FROM PayrollRuns > 3000 ) THEN 0 ELSE 3000 END )
        END AS 'Employment Allowance',
    SMP AS 'SMP Recovered',
    NICompOnSMP AS 'SMP Comp',
    SPPA + SPPB AS 'SPP Recovered',
    SPPACompensation + SPPBCompensation AS 'SPP COMP',
    SAP AS 'SAP Recovered',
    SAPCompensation,
    SHPP_A + SHPP_B AS 'Shpp Recovered',
    SHPP_A_Compensation + SHPP_B_Compensation AS 'ShPP Comp',
    Apprenticeship_Levy_Due AS 'App Levy'
    FROM PayrollRuns pr
    CROSS JOIN [Employer Details] ed
    WHERE RunID = '1058'
    GROUP BY Tax, StudentLoans, GrossNI, SMP, NICompOnSMP, ed.EA_Indicator_CY, 
    SPPACompensation, SPPBCompensation, SAPCompensation, SHPP_A_Compensation, 
    SHPP_B_Compensation, SPPA, SPPB, SAP, Apprenticeship_Levy_Due, SHPP_A, 
    SHPP_B

【讨论】:

  • 您好,感谢您的回答。虽然我应该在我的问题中说明我已经尝试过了,但输出仍然相同。不过谢谢
  • 是的 :(... 即使我尝试执行 Case When 本身它仍然返回 0。它绝对不应该是 0
  • 检查 EA_Indicator_CY 的实际价值和总和(资金)
  • EA_Indicator_CY = 1... SUM(Funding) = 0
  • 答案已更新 .. 更改时(选择总和...)而不是选择大小写 .. 在内壳
最近更新 更多