SQL一张表-当前期间的情况

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

我们的表格“ LN详情”具有以下数据。

**ACTG PRD CASE ID DEC**
202004  101 Flexible
202003  105 Non Flexible
202004  106 Flexible
202003  101 Non Flexible
202004  109 Flexible

现在,我们希望desc是“灵活的”并在当前期间添加,而这些情况不应该在上一个期间中。这里的案例101是当前期202004和202003。因此我们不希望在结果数据中使用这是预期的输出:

**ACTG PRD CASE ID DEC**
202004  106 Flexible
202004  109 Flexible

“

sql netezza
1个回答
0
投票

在表名或列名中都添加空格绝不是一个好主意;在案例列名称(如Case或DEC)中也不应使用SQL关键字;而是使用下划线代替空格。但是,由于您的空格,我的答案包括需要的方括号。

    Select * from [LN DETAILS] 
    where [LN DETAILS].[ACTG PRD]=(
            select Str(DATEPART(yyyy,GETDATE()),4)+ case when DATEPART(mm,GETDATE())<10 
            Then Str(0,1)+Str(DATEPART(mm,GETDATE()),1) 
            Else Str(DATEPART(mm,GETDATE()),2) end)
        and [LN DETAILS].[DEC]='Flexible'

从上方更新,不返回前一个ONLY月份中包含一个的Case_ID。太长了,因为您的dateField是文本。

 Select * from [LN DETAILS] t1
 where not exists (
    select * from [LN DETAILS] t2 
    where t1.[Case ID]=t2.[Case ID]
    and t1.[ACTG PRD]=(
             select Str(DATEPART(yyyy,GETDATE()),4)+ case when DATEPART(mm,GETDATE())<10 
             Then Str(0,1)+Str(DATEPART(mm,GETDATE()),1) 
             Else Str(DATEPART(mm,GETDATE()),2) end)
    and t2.[ACTG PRD]=(
            select Str(DATEPART(yyyy,Dateadd(month,-1,getdate())),4)+ case when DATEPART(mm,Dateadd(month,-1,getdate()))<10 
             Then Str(0,1)+Str(DATEPART(mm,Dateadd(month,-1,getdate())),1) 
             Else Str(DATEPART(mm,Dateadd(month,-1,getdate())),2) end) )
 and t1.[ACTG PRD]=(
             select Str(DATEPART(yyyy,GETDATE()),4)+ case when DATEPART(mm,GETDATE())<10 
             Then Str(0,1)+Str(DATEPART(mm,GETDATE()),1) 
             Else Str(DATEPART(mm,GETDATE()),2) end)
 and t1.[DEC]='Flexible'
© www.soinside.com 2019 - 2024. All rights reserved.