2014-07-12 86 views
0

在我的軟件系統中,重要的查找列歷史上有三個數值之一。如何使單個連接值與一系列值匹配

我們現在要在兩者之間允許更多的值,但我仍然需要能夠映射原始三點規模上的所有中間值。

該系統用於根據整數值對積極,中立和負面進行評級。它使用2,4和6

我們現在已經到-5到+5的評級系統,但仍然只使用2,4和6來傳遞正中性值和負值。

在我們有一個存儲過程編寫數據庫與正好2或4或6返回的行,但現在它需要與 -5通過-2返回行,如果是6 -1到1,如果4 和-2至-5如果2.

這是怎樣的INNER JOIN寫

INNER JOIN @SiteIDs sti ON sti.SiteID = s.SiteID 
     --AND d.SiteID IN (ISNULL(@SiteIDList, d.SiteID)) 
     AND ISNULL(s.DatePosted, '1/1/1901') >= ISNULL(@StartDate, '1/1/1900') 
     AND ISNULL(s.DatePosted, '1/1/9998') <= ISNULL(@EndDate, '1/1/9999') 
     AND s.Favorite = CASE WHEN @FavoritesOnly = 1 THEN 1 ELSE s.Favorite END 
     AND s.SID = ISNULL(@SID, s.SID) -- this is what needs to be changed 

我知道需要做些什麼:
時@SID是6 s.sid需要返回所有值即-2,-3,-4和-5,並且對於其他兩個範圍類似。 我只是不確定如何正確的語法。

+0

這是連接 - 哪裏是返回值的部分。 – Hogan

回答

0

我想這是你之後:

INNER JOIN @SiteIDs sti ON sti.SiteID = s.SiteID 
    --AND d.SiteID IN (ISNULL(@SiteIDList, d.SiteID)) 
    AND ISNULL(s.DatePosted, '1/1/1901') >= ISNULL(@StartDate, '1/1/1900') 
    AND ISNULL(s.DatePosted, '1/1/9998') <= ISNULL(@EndDate, '1/1/9999') 
    AND s.Favorite = CASE WHEN @FavoritesOnly = 1 THEN 1 ELSE s.Favorite END 
    AND s.SID between 
     case coalesce(@SID,0) 
      when 6 then -5 
      when 4 then -1 
      when 2 then 2 
      default s.SID --if @SID is not valid, all results are returned 
     end 
     and 
     case coalesce(@SID,0) 
      when 6 then -2 
      when 4 then 1 
      when 2 then 5 
      default s.SID 
     end 
+1

當然是感謝它的幫助,它使我在正確的軌道上肯定。 – user2448701

0

這是你想要的嗎?

AND @SID is null or @SID = 6 and SID in (-2, -3, -4, -5) 
0

如果你有這樣的事情:

SELECT rating -- this used to return 2, 4, or 6 
... 

現在需要

SELECT CASE WHEN rating = 6 THEN -1 
      WHEN rating = 4 THEN -2 
      WHEN rating = 2 THEN -5 
      ELSE 0 -- this is an error 
     END AS rating 
... 

如果你想做到這一點,只有當@SID = 6然後

SELECT CASE WHEN @SID = 6 AND rating = 6 THEN -1 
      WHEN @SID = 6 AND rating = 4 THEN -2 
      WHEN @SID = 6 AND rating = 2 THEN -5 
      ELSE rating 
     END AS rating 
... 
相關問題