이 쿼리는 작동하지만 매우 비효율적 인 것처럼 보입니다. 더 좋은 방법이 있어야합니까?이 쿼리를 작성하는 더 좋은 방법이있을 수 있습니까?
내가하려는 일은 회사가 속해있는 지역을 기반으로 MarketRates 테이블에서 4 개의 다른 열을 선택하는 것입니다. 회사 테이블에 정수 1-4로 저장되는 지역은 4 개뿐입니다. 예를 들어, Territory가 "1"이면 4 개의 Southern California 열 (열 이름은 SCA *)을 선택하려고하지만 Territory가 "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
다른 필드는 NULL입니까? – JNK
또한 데이터베이스 설계 재교육을 위해 자원 설계를해야한다고 생각합니다. – JNK