这个查询的工作原理,但似乎非常低效。一定有更好的方法?必须有更好的方法来编写这个查询吗?
我想要做的是从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