2017-02-14 22 views
1

我繼承了我正在轉向PHP代碼庫的ASP應用程序。我正在掙扎如何減去SQL中IN子句的內部?

一個查詢爲如下

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 &語法做報表的內部數學運算。我怎麼才能在純粹使用Microsoft SQL的IN語句中得到相同的結果,即過去5個術語的列表。

我不只是想要這些年。這不是這個問題的答案。我想知道如何在IN語句中進行這種減法。

+0

刪除引號和&字符,這就是它 –

+0

我噸將其更改爲... 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 

編輯爲動態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。我想用term變量替換201609並保持動態。 – KinsDotNet