复杂添加在SQL Server的子句中

时间:2016-09-15 15:54:20

标签: sql-server

where子句中的复杂添加:

select * 
from #table 
where 
    ((IsNullChamps1, 0) AND Date < 2009) + ((IsNull(#champs2, 0)) AND Date < 2008) < 90

我的查询;我想仅使用(IsNullChamps1, 0)Date < 2009添加(IsNullChamps1, 0)的值,仅限日期&lt; 30

我会尽量让它更清楚。我有一个包含4列的表:

Id_table 
Champs1
Champs2
Date

例如:

            Date  2013  2011  2009  2008  2007  2006
champs            90    20    50    60    10     30
champs2           70    30    0.0   16    36     25

例如,我想添加带有日期&lt;的champs1的值。 2008年,冠军2的价值与日期&lt; 2013。

2 个答案:

答案 0 :(得分:0)

我认为您正在尝试做这样的事情?

select * from #table 
where Champs1 < 2009
  AND Champs2 < 2008
  AND IsNull(Champs1,0) + IsNull(Champs2,0) < 90

答案 1 :(得分:0)

假设您使用的是SQL Server 2008+,CASE语句可能就是您要找的。它允许您在块内执行布尔条件。你想要的时候选择Champs1或者把它变成0,你需要时选择Champs2或者把它变成0,然后加总它们并进行比较。

--Sample Data
DECLARE @mytable TABLE(
  [Date] INT NOT NULL,
  [Champs1] INT NULL,
  [Champs2] INT NULL
  )

INSERT INTO @mytable (Date, Champs1, Champs2)
VALUES (2013, 90, 70), (2011, 20, 30), (2009, 50, 0), (2008, 60, 16), (2007, 0, 36), (2006, 30, 25)

--Select statement
SELECT *
FROM @mytable
WHERE 
    (CASE WHEN Date < 2009 THEN ISNULL(Champs1, 0) ELSE 0 END +
    CASE WHEN Date < 2013 THEN ISNULL(Champs2, 0) ELSE 0 END)
    < 90