2017-02-13 74 views
-1

我敢肯定,這是一個簡單的問題,但我覺得我一直在尋找這個很長時間沒有任何進展。我正在嘗試使用基於嵌套查詢的CASE語句來計算最終列。嵌套的案例陳述返回零

SELECT ID,Category, MaxBand, MinBand, Value, Company_Cost, 
     CASE WHEN Company_Cost > MaxBand THEN MaxBand 
     ELSE Company_Cost 
     END AS Final_Company_Cost 
FROM 
(
    SELECT ID, Category, MaxBand, MinBand, Value, 
      CASE WHEN (Value - MinBand) > 0 THEN (Value- MinBand) 
      ELSE 0 
      END AS Company_Cost 
    FROM #TempTable 
) T1 

,我正在看錶數據低於:

ID  Category MaxBand MinBand Value  Company_Cost Final_Comapny_Cost 
    11548 1   0   0   8478121 8478121  0 
    11548 2   50000  0   417732 417732  50000 

基本上我試圖使Final_Company_Cost列有8478121和50000,因爲沒有帶最大的第1類,但它保持返回零。

任何幫助將不勝感激。

+1

Case表達式,而不是case語句。 – jarlh

+0

Ha Ha jarlh你舀了這個獎項,可能是我讀過的最不有用的評論。謝謝 – Carlos80

+0

不客氣! – jarlh

回答

0

希望,我正確理解你的問題。

請檢查以下查詢是否可以幫助您尋找什麼。

SELECT ID,Category, MaxBand, MinBand, Value, Company_Cost, 
CASE 
    WHEN Company_Cost > MaxBand THEN Company_Cost ELSE MaxBand -- changed here 
END AS Final_Company_Cost FROM 
(SELECT ID,Category, MaxBand, MinBand, Value, 
     CASE 
      WHEN (Value - MinBand) > 0 THEN (Value- MinBand) ELSE 0 
     END AS Company_Cost 

FROM #TempTable) T1 
+0

感謝Tajinder爲您的快速回復,這給了我第1行中我正在尋找的8478121,但同時在第2行中給了我417732,而不是將其限制在50000,因爲MaxBand中有一個值。有任何想法嗎? – Carlos80

+0

請確認我是否正確地得到您想要根據類別1上的最大波段獲取類別2的Final_Company_Cost – Tajinder

+0

如果值大於MaxBand中的值,我想將Company_Cost拉入Final_Company_Cost if不通過MaxBand。所以我的最終值應該是第1行的8478121和第2行的50000。 – Carlos80

0

讓我們看看你的CASE表達式邏輯。

CASE WHEN Company_Cost > MaxBand THEN MaxBand 
     ELSE Company_Cost 
     END AS Final_Company_Cost 

在英語中,您表示何時company_cost值大於MaxBand值,然後返回MaxBand值。如果不是,請返回company_cost值。

對於您的示例,如果它大於MaxBand,則希望返回company_cost值。這意味着CASE表達應更新爲:

CASE WHEN Company_Cost > MaxBand THEN Company_Cost 
     ELSE MaxBand 
     END AS Final_Company_Cost 

通過邏輯有時大聲交談會幫助你找到你的表達錯誤。

+0

感謝彌敦道,我試圖修改查詢這種方式,但由於某種原因,我似乎無法通過ELSE MaxBand值拉。我的Final_Company_Cost通過了相關列中的所有值,並且看起來不會混淆在兩者之間。因此,在您的示例中,第1行中的8478121和第2行中的417732而不是50000 – Carlos80

+0

第2行設置爲大於50,000的417,732。無論您需要更改比較器邏輯還是修復第2行值列中的拼寫錯誤。也許你打算在50萬的最高樂隊? – Nathan

+0

當然!感謝您指出明顯,我一直盯着這個太久。我現在已經去了當MaxBand = 0然後Company_Cost Else MaxBand - 簡單的時候你有第二雙眼睛。謝謝。 – Carlos80

0

入住這裏:

CASE WHEN Company_Cost > MaxBand THEN MaxBand 
     ELSE Company_Cost 
     END AS Final_Company_Cost