2017-02-14 8 views
1

Я унаследовал приложение ASP, которое я перехожу к кодовой базе PHP.Как вычесть внутри предложения IN в SQL?

Один запрос, который я борюсь с следующим

select * 
from (
    select TERM_REPORTING, 
     LEVEL_GROUPING_DESC, 
     New_primary_college_Desc, 
     ID_count 
    from Enrollment 
    ) a 
pivot(sum(ID_count) for TERM_REPORTING in (
    [" & 201609 - 400 & "], 
    [" & 201609 - 300 & "], 
    [" & 201609 - 200 & "], 
    [" & 201609 - 100 & "], 
    [" & 201609 & "] 
    ) 
) as total_credit 

Я не знаю, как они используют этот & 201609 - 400 & синтаксис делать математические операции внутри заявления IN. Как я могу получить тот же результат, список последних 5 терминов, внутри оператора IN, только с Microsoft SQL.

Я не просто хочу лет. Это не ответ на этот вопрос. Я хочу знать, как сделать это вычитание в инструкции IN.

+0

Удалить цитаты и & персонажей, и это все –

+0

I t изменив его на ... TERM_REPORTING in ([201609 - 100])) ... но я получаю «Неправильное значение« 201609 - 100 »поставляется в операторе PIVOT». – KinsDotNet

ответ

2

Похоже, они где построение некоторых динамических SQL

Конечный результат будет выглядеть следующим образом

select * 
from (
    select TERM_REPORTING, 
     LEVEL_GROUPING_DESC, 
     New_primary_college_Desc, 
     ID_count 
    from Enrollment 
    ) a 
pivot(sum(ID_count) for TERM_REPORTING in (
    [201209], 
    [201309], 
    [201409], 
    [201509], 
    [201609] 
    ) 
) as total_credit 

EDIT как динамический SQL

Declare @Base int = 21609 
Declare @SQL varchar(max)=' 
select * 
from (
    select TERM_REPORTING, 
     LEVEL_GROUPING_DESC, 
     New_primary_college_Desc, 
     ID_count 
    from Enrollment 
    ) a 
pivot(sum(ID_count) for TERM_REPORTING in (
    [' + cast(@Base - 400 as varchar(25)) +'], 
    [' + cast(@Base - 300 as varchar(25)) +'], 
    [' + cast(@Base - 200 as varchar(25)) +'], 
    [' + cast(@Base - 100 as varchar(25)) +'], 
    [' + cast(@Base as varchar(25)) +'] 
    ) 
) as total_credit 
' 
Exec(@SQL) 
+0

Извините, если было неясно, я хотел бы поддерживать этот динамический SQL. Я хочу заменить 201609 на переменную: term и оставить ее динамической. – KinsDotNet

Смежные вопросы