2017-10-12 87 views
-3

誰能幫我試圖解決這個方程?該「Lost_Weight」是計算領域,我試圖讓HWeight的結果 - renWeight =「0」,如果renWeight爲0 where子句有把挑戰我要做到這一點有爭議的聲明。見下文。SQL避免0在計算

SELECT  TOP (100) PERCENT dbo.Name.ID, 
         dbo.Name.CO_ID, 
         dbo.Name.FULL_NAME, 
         dbo.Name.STATE_PROVINCE, dbo.Tops_Profile.START_WGHT, 
         dbo.Tops_Profile.RENEWAL_WEIGHT, 
         dbo.Tops_Profile.H_WEIGHT - dbo.Tops_Profile.RENEWAL_WEIGHT AS Lost_Weight, 
         dbo.Tops_Profile.H_WEIGHT, 
         dbo.Name.JOIN_DATE, 
         dbo.Name.BIRTH_DATE, 
         RIGHT(dbo.TOPS_AWARDS.AWARD_TYPE, 15) AS AWARDS_TYPE, 
         dbo.TOPS_AWARDS.AWARD_CATEGORY, 
         dbo.TOPS_AWARDS.AWARD_DATE, 
         dbo.vw_RegDirs.TARGET_ID AS 
         RD_ID, 
         dbo.vw_Coords.TARGET_ID AS Coord_ID, 
         dbo.vw_Coords.FULL_NAME AS 
         Coord_Name, 
         dbo.vw_AreaCapts.TARGET_ID AS AC_ID, dbo.Name.STATUS 
FROM   dbo.Name INNER JOIN dbo.Tops_Profile 
    ON dbo.Name.ID = dbo.Tops_Profile.ID 
INNER JOIN dbo.vw_RegDirs 
         ON dbo.Name.CO_ID = dbo.vw_RegDirs.CHAPTER 
INNER JOIN dbo.vw_Coords 
        ON dbo.Name.CO_ID = dbo.vw_Coords.CHAPTER 
INNER JOIN dbo.vw_AreaCapts 
     ON dbo.Name.CO_ID = dbo.vw_AreaCapts.CHAPTER 
LEFT OUTER JOIN dbo.TOPS_AWARDS 
    ON dbo.Name.ID = dbo.TOPS_AWARDS.ID 
WHERE  (dbo.Tops_Profile.RENEWAL_WEIGHT <> '0') 
      AND (dbo.Name.STATUS = 'a') 
     AND (dbo.Tops_Profile.H_WEIGHT - dbo.Tops_Profile.RENEWAL_WEIGHT >= 100') 
    OR (dbo.Name.STATUS = 'a') AND (dbo.TOPS_AWARDS.AWARD_TYPE LIKE '%Century%') 

現在如果renewal_weight爲0,它會自動給我從Lost_Weight領域H_WEIGHT數量,我需要的結果是0,如果RENEWAL_WEIGHT爲0

+0

請給整個SQL語句。另外,請給出表格的模式以瞭解背景 –

+0

爲什麼要將計算與文本進行比較? 「H_Weight」和「Renewal_Weight」的數據類型是什麼? –

+0

數字。數據類型是'浮動' – Messi

回答

1

我猜0在這種情況下是一種特殊的價值。這可以通過使用CASE固定

更換

dbo.Tops_Profile.H_WEIGHT - dbo.Tops_Profile.RENEWAL_WEIGHT AS Lost_Weight 

隨着

CASE WHEN RENEWAL_WEIGHT = 0 THEN 0 
    ELSE dbo.Tops_Profile.H_WEIGHT - dbo.Tops_Profile.RENEWAL_WEIGHT 
END AS Lost_Weight