SQL Одна таблица - Случаи текущего периода - PullRequest
0 голосов
/ 26 апреля 2020

У нас в таблице "LN DETAILS" есть данные ниже.

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

Теперь нам нужны случаи, когда des c имеет значение "Flexible" и добавляется в текущем периоде, и они не должны быть в предыдущем периоде. Здесь CASE 101 находится в ТЕКУЩЕМ ПЕРИОДЕ 202004 и 202003. Поэтому мы не хотим, чтобы это было в данных результата. Вот ожидаемый результат:

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

table

1 Ответ

0 голосов
/ 26 апреля 2020

Никогда не стоит ставить пробелы в именах, будь то таблица или столбец; и при этом вы не должны использовать SQL Ключевые слова в именах столбцов вашего дела, таких как Case или DEC; скорее используйте подчеркивание вместо места. Мой ответ, однако, включает в себя необходимые скобки из-за ваших пробелов.

    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'

Обновление сверху, чтобы не возвращать идентификаторы Case_ID с предыдущим ONLY месяцем. Безумно долго, потому что ваш 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'
...