SQL:条件选择中的条件选择

Dam*_*ien 6 sql select

请耐心等待,这很难解释,我不确定我是否使用了正确的术语.

我需要做一个相当复杂的选择.它实际上是一个select语句,它有条件地决定使用哪个字段来过滤select.如果某个日期字段不为null,我需要检查该字段中的值是否在某个范围内.否则,如果该date字段为null,我需要检查同一个表上的另一个字段int字段是否在一定范围内:

伪代码:

If [Date] is not null
    Get sum (table.value) for rows Date >= dateValue and Date < dateValue
Else
    Get sum (table.value) for rows Int >= intValue and Int < intValue
Run Code Online (Sandbox Code Playgroud)

我目前的尝试:

SELECT CASE WHEN a.Date IS NOT NULL THEN 
(SUM(CASE WHEN (a.Date >= cal.Date) THEN ABS(a.Value) ELSE 0 END)) 
ELSE 
(SUM(CASE WHEN (b.Days >= 0) THEN ABS(a.Value) ELSE 0 END) 
END AS 'A'
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?询问您是否需要更多信息.提前致谢.

gbn*_*gbn 5

一种方法是将2个单独的查询UNIONed放在一起,但只有一个子句会生成一个值.这避免了OR语句.

SELECT SUM(Value)
FROM MyTable
WHERE MyTable.Date >= dateValue and Table.Date < dateValue  --NULL Date = false always
UNION ALL
SELECT SUM(Value)
FROM MyTable
WHERE MyTable.Int >= intValue and Table.Int < intValue
    AND --ignore this clause if date is NOT NULL
    MyTable.Date IS NULL
Run Code Online (Sandbox Code Playgroud)

用OR编辑:

SELECT SUM(Value)
FROM MyTable
WHERE
     (
      MyTable.Date IS NOT NULL AND 
      MyTable.Date >= dateValue and Table.Date < dateValue
      )
      OR --actually mutually exclusive
     (
      MyTable.Date IS NULL AND 
      MyTable.Int >= intValue and Table.Int < intValue 
      )
Run Code Online (Sandbox Code Playgroud)