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。
答案 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