這個查詢的工作原理,但似乎非常低效。一定有更好的方法?必須有更好的方法來編寫這個查詢嗎?
我想要做的是從MarketRates表中選擇4個不同的列,根據公司所在的地區。只有4個地區,在公司表中存儲爲整數1-4。因此,例如,如果領土是「1」,那麼我想選擇4個南加州列(列名是SCA *),但如果領土是「2」,那麼我想選擇4個Norhtern加州列(列名是NCA *)等。
我知道這些表應該有不同的構造,但這是我必須處理的。
的MarketRates表包含這些列(SCA =南加州,NCA =北加州,SNV =內華達州南部,NAZ =北亞利桑那:
- ENDINGDATE - 最新
- SCA_MRK - 十進制(8,2 )
- SCA_RATE - 十進制(8,2)
- SCA_COMP - 十進制(8,2)
- SCA_NEG - 十進制(8,2)
- NCA_MRK - 十進制(8,2)
- NCA_RATE - 十進制(8,2)
- NCA_COMP - 十進制(8,2)
- NCA_NEG - 十進制(8,2)
- SNV_MRK - 十進制(8,2 )
- SNV_RATE - 十進制(8,2)
- SNV_COMP - 十進制(8,2)
- SNV_NEG - 十進制(8,2)
- NAZ_MRK - 十進制(8,2)
- NAZ_RATE - 十進制(8,2)
- NAZ_COMP - 十進制(8,2)
- NAZ_NEG - 十進制(8,2)
這是我使用的當前查詢:
Select CompanyName
, case TerritoryNumber
when 1 then (Select top 1 coalesce(SCA_MRK,0) From MarketRates Order by EndingDate desc)
when 2 then (Select top 1 coalesce(NCA_MRK,0) From MarketRates Order by EndingDate desc)
when 3 then (Select top 1 coalesce(SNV_MRK,0) From MarketRates Order by EndingDate desc)
when 4 then (Select top 1 coalesce(NAZ_MRK,0) From MarketRates Order by EndingDate desc)
end AS MRK
, case TerritoryNumber
when 1 then (Select top 1 coalesce(SCA_RATE,0) From MarketRates Order by EndingDate desc)
when 2 then (Select top 1 coalesce(NCA_RATE,0) From MarketRates Order by EndingDate desc)
when 3 then (Select top 1 coalesce(SNV_RATE,0) From MarketRates Order by EndingDate desc)
when 4 then (Select top 1 coalesce(NAZ_RATE,0) From MarketRates Order by EndingDate desc)
end AS RATE
, case TerritoryNumber
when 1 then (Select top 1 coalesce(SCA_COMP,0) From MarketRates Order by EndingDate desc)
when 2 then (Select top 1 coalesce(NCA_COMP,0) From MarketRates Order by EndingDate desc)
when 3 then (Select top 1 coalesce(SNV_COMP,0) From MarketRates Order by EndingDate desc)
when 4 then (Select top 1 coalesce(NAZ_COMP,0) From MarketRates Order by EndingDate desc)
end AS COMP
, case TerritoryNumber
when 1 then (Select top 1 coalesce(SCA_NEG,0) From MarketRates Order by EndingDate desc)
when 2 then (Select top 1 coalesce(NCA_NEG,0) From MarketRates Order by EndingDate desc)
when 3 then (Select top 1 coalesce(SNV_NEG,0) From MarketRates Order by EndingDate desc)
when 4 then (Select top 1 coalesce(NAZ_NEG,0) From MarketRates Order by EndingDate desc)
end AS NEG
from Company
where CompanyID = 'THISID'
是的,有... – SQLMason
其他字段爲空嗎? – JNK
另外,我認爲無論誰設計這個應該自願參加數據庫設計再教育營。 – JNK