sql server 2008 r2: випадок випадок у депозиці для поточного фінансового року

Я намагаюся написати код, де хочу переглядати лише запити поточного фінансового року. Наш фінансовий рік починається 1 липня і закінчується 30 червня

Але коли я пишу наступний код

SELECT
    group_name
    ,SUM(CASE WHEN status = 'HOLD'THEN 1 ELSE 0 END) AS HOLD    
    ,SUM(CASE WHEN status = 'CL'THEN 1 ELSE 0 END) AS CL
    ,SUM(CASE WHEN status = 'OP'THEN 1 ELSE 0 END) AS OP
FROM dbo.View_Request 
WHERE CASE WHEN datepart(mm, GetDate()) > 6 THEN /*It is past June in this year*/
            datepart(mm,dateadd(second,open_date,'19700101')) >= 7
            AND datepart(yy,dateadd(second,open_date,'19700101')) = datepart(yy, GetDate())
        ELSE /*It is June 30th or earlier in the year*/
            CASE WHEN datepart(mm,dateadd(second,open_date,'19700101')) <= 6 THEN
                datepart(yy,dateadd(second,open_date,'19700101')) = datepart(yy, GetDate())
            ELSE
                datepart(yy,dateadd(second,open_date,'19700101')) = datepart(yy, GetDate())-1
            END
        END
GROUP BY group_name

Я отримую неясне повідомлення про помилку:

Msg 102, Level 15, State 1, Line 8
Incorrect syntax near '>'.

Як виправити цей код, щоб розглянути записи лише з поточного фінансового року

2

1 Відповіді

Ваша перша справа трохи смішно:

CASE WHEN datepart(mm, GetDate()) > 6 THEN /*It is past June in this year*/
        datepart(mm,dateadd(second,open_date,'19700101')) >= 7  
        AND datepart(yy,dateadd(second,open_date,'19700101')) = datepart(yy, GetDate())

Дивіться цю другу і третю лінію ?? Хто вони??

Ваша заявка CASE повинна завжди бути:

CASE WHEN (condition) THEN (return value)
     WHEN (condition 2) THEN (return value 2)
     ...
     ELSE (return value x)
END

Ці дві лінії дійсно не вміщаються там - після ключового слова WHEN , ви повинні мати просто вираз, який повертає одне значення - не дві рядки коду .....

2
додано
@jsmith: чи могли б ви, будь ласка, оновити своє питання за допомогою рішення - тут у коментарях це дуже важко , щоб прочитати .....
додано Автор marc_s, джерело
Я зрозумів його: WHERE ((datepart (yy, dateadd (second, open_date, '19700101')) = datepart (yy, getDate ()) І datepart (mm, dateadd (second, open_date, '19700101')))> 6 AND datepart (mm, dateadd (second, open_date, 'datedate', 'datedate', 'datedate', 'datedate'); 19700101 ')) <= 6 AND datepart (мм, GetDate ()) <= 6) АБО (часовий інтервал (yy, dateadd (second, open_date,' 19700101 ')) = datepart (yy, getdate() - 1) AND datepart (mm, dateadd (second, open_date, '19700101'))> 6 AND datepart (mm, getdate ()) <= 6))
додано Автор jsmith, джерело