2017-03-31 45 views
1

我有一個將值插入表的查詢,並使用CASE來確定每行的值。我想知道是否有可能在計算列中排除null或零?SQL從大小寫列中排除零

CASE 
     WHEN Value = 0 THEN Value2 
     WHEN Value2 < Value1 THEN Value3 
     WHEN Value2 > Value1 THEN Value4 
    END AS Final_Value 

這會產生幾十萬行,其中好幾千行現在爲零或爲空。我可以在同一段代碼中排除這些嗎?

感謝

+0

你可以避免它在查詢結束時像Where Final_Value <> 0 –

+0

你想排除0,但你正在檢查條件...所以你的第一個WHEN是不必要的,不是?如果使用where子句,它將從整個數據集中刪除......這可能是你想要的 – scsimon

+0

你使用的是MySQL還是MS SQL Server?不要標記不涉及的產品。 – jarlh

回答

1

使用where子句:

select 
    ... 
, case 
    when value = 0 
    then value2 
    when value2 < value1 
    then value3 
    when value2 > value1 
    then value4 
    end as final_value 
from ... 
where case 
     when value = 0 then value2 
     when value2 < value1 then value3 
     when value2 > value1 then value4 
    end <> 0 
+0

或值不爲空+1速度 – scsimon

+0

@scsimon'null <> 0'返回'null',所以它將被排除。 rextester演示:http://rextester.com/HON14029 – SqlZim

+1

在WHERE子句中使用AND/OR而不是用例表達式通常更好。 – jarlh

0

0或可以在查詢的結尾可以避免像

SELECT 
ACCGRPID, 
LOCID, 
USERID4, 
LOBNAME, 
REINSTYPE, 
INCEPTDATE, 
EXPIREDATE, 
Latitude, 
Longitude, 
CountryRMSCode, 
StreetAddress, 
CityName, 
ACCGRPNUM, 
ACCGRPNAME,  
CASE 
    WHEN Value = 0 THEN Value2 
    WHEN Value2 < Value1 THEN Value3 
    WHEN Value2 > Value1 THEN Value4 
END AS Final_Value 
FROM <table_name> 
WHERE Final_Value <> 0 
0
;WITH CTE AS (
     select 
      ACCGRPID, 
      LOCID, 
      USERID4, 
      LOBNAME, 
      REINSTYPE, 
      INCEPTDATE, 
      EXPIREDATE, 
      Latitude, 
      Longitude, 
      CountryRMSCode, 
      StreetAddress, 
      CityName, 
      ACCGRPNUM, 
      ACCGRPNAME,  
      CASE 
       WHEN Value = 0 THEN Value2 
       WHEN Value2 < Value1 THEN Value3 
       WHEN Value2 > Value1 THEN Value4 
      END AS Final_Value 
    ) 
    select * from CTE 
    where Final_Value <> 0 
      and Final_Value is not null 
0

空值。如果這是不可能的過濾在where子句中,所以有一個簡單的解決方案,我在某些情況下使用子查詢。

實施例:

select X.* from (
SELECT 
    ACCGRPID, 
    LOCID, 
    USERID4, 
    LOBNAME, 
    REINSTYPE, 
    INCEPTDATE, 
    EXPIREDATE, 
    Latitude, 
    Longitude, 
    CountryRMSCode, 
    StreetAddress, 
    CityName, 
    ACCGRPNUM, 
    ACCGRPNAME, 
    CASE 
     WHEN Value = 0 THEN Value2 
     WHEN Value2 < Value1 THEN Value3 
     WHEN Value2 > Value1 THEN Value4 
    END AS Final_Value 
    from <table_name>) X 
where X.Final_Value != 0 and X.Final_Value is not null 
0

審查CASE WHEN所以不會導致0或NULL

例如:

CASE 
WHEN Value = 0 THEN Value2 
WHEN Value2 <= Value1 THEN Value3 
WHEN Value2 > Value1 THEN Value4 
ELSE Value2 
END AS Final_Value 

當然,這一個假設值2, Value3和Value4不是NULL而不是0.