需要帮助为以下场景编写案例陈述

问题描述 投票:0回答:3

我有一张表格如下:

ID  Salary  plan    End Date
1001    20000   A   NULL
1001    300 B   NULL
1002    40000   A   2023-04-31
1002    250 B   NULL

我的要求是,对于员工来说,如果 计划=A 和 [结束日期] <> NULL 那么Salary应该从Plan B中选择 计划=A 且[结束日期]=NULL 那么薪资应该从A计划中选择

我的查询如下所示,但没有成功。

select ID,[PLAN],[End Date],
case when [PLAN]='A'and [End Date]<> 'NULL'
then Cast(Null as Nvarchar(Max))
when PLAN='A'and [End Date]= '#####' then [Salary]
else [Salary]
END [Updated_Salary]
from Table
sql sql-server case
3个回答
0
投票
with your_table(ID,Salary,plann,End_Date)
as
(
    select 1001,    20000,   'A',   NULL union all
    select 1001,    300, 'B',   NULL union all
    select 1002,    40000,   'A', '2023-04-30' union all
    select 1002,    250, 'B' ,  NULL
 )
 select x.id,
 case
   when x.plann='A' and X.End_Date is not null then X.b_salary
   when x.plann='A' and X.End_Date is null then X.Salary
 end as Flagg
from
(
  select a.id,a.Salary,a.plann,a.End_Date,
  b.ID as b_id,b.Salary as b_salary,b.plann as b_plann,b.End_Date as b_end_date
 from your_table as a
 left join your_table as b on a.ID=b.ID and a.plann<>b.plann 
)as x

无法确定要求,但可能类似的东西可以作为起点


0
投票

虽然不清楚你想要的预期结果是什么。但我会尝试使用下面的查询来修复您的查询,以检查 [结束日期] 是否为空。

SELECT ID, [PLAN], [End Date],
    CASE WHEN [PLAN]='A'AND [End Date] <> NULL
        THEN null
    WHEN PLAN='A'AND [End Date] = NULL
        THEN [Salary]
    ELSE [Salary]
END [Updated_Salary]
FROM SAMPLE;

0
投票

基于 ID 和计划类型的自联接表,如果计划 A 类型结束日期不为空,则考虑 A 中的工资类型,否则考虑 B

declare  @table table(
ID int ,
Salary decimal(18,2),
planType varchar(2), 
EndDate dateTime
)

insert into @table
values (1001  ,  20000 ,  'A'  , NULL),
(1001   , 300 ,'B'   ,NULL),
(1002  ,  40000 ,  'A'  , 2023-04-31),
(1002   , 250,'B' ,  NULL)

select t1.ID,case when t1.EndDate is not null then t2.Salary else t1.Salary end as Salary 
from @table t1 join @table t2 on t1.ID=t2.ID and t1.planType='A' and t2.planType='B'

结果将是

身份证 薪资
1001 20000
1002 250
© www.soinside.com 2019 - 2024. All rights reserved.