【发布时间】:2015-11-05 09:16:11
【问题描述】:
如果另一个临时表没有返回任何行,我需要编写一个从一个临时表返回值的查询。
编辑:整个表具有以下结构
NAME TYPE DATE VALUE
Washington 1 NULL 1000 <--default value
Washington 2 NULL 750 <--default value
Washington 3 NULL 500 <--default value
Washington 1 04.11.2015 500
Washington 2 04.11.2015 250
Washington 3 04.11.2015 100
Washington 1 07.11.2015 600
Washington 2 07.11.2015 300
Washington 3 07.11.2015 200
临时表:Name, type, date, value 其中日期 IS NULL 返回“默认”值
临时表:Name, Type, date, value,其中每个唯一的 Name 将有 3 种类型 (1,2,3),每种类型都有不同的值,它们都具有相同的日期。
当日期列没有条目时,这意味着值应该是“默认”,它们存储在同一个表中日期为空的行下
我也有 8 个不同的参数来确定值,但我只对 '1' 和 '2' 感兴趣,因此是 'case when'
所以我最后想要得到的是:
Select *
from temp1
where date =GETDATE()
如果它不存在,我希望它返回:
select * from temp2.
我只对今天、明天和后天的结果感兴趣
这是我到目前为止所得到的,但它显然不起作用。
如果能得到任何帮助,我将不胜感激
WITH defaultvalues
AS ( SELECT DISTINCT
n.Name ,
Type ,
Value
FROM mytable
LEFT JOIN nametable AS n ON mytable.x = r.Id
AND Date IS NULL
),
changedvalue
AS ( SELECT DISTINCT
n.Name ,
type ,
date ,
CASE WHEN d.Date = GETDATE()
AND Parameter = '1' THEN Value
WHEN Parameter = '2' THEN '0'
END AS CAP
FROM mytable
LEFT JOIN nametable AS n ON mytable.x = r.Id
WHERE Parameter IN ( '1', '2' )
)
SELECT CASE WHEN NOT EXISTS ( SELECT *
FROM changedvalue
WHERE changedvalue.Date = GETDATE() )
THEN ( SELECT *
FROM defaultvalues
)
END
【问题讨论】:
-
从故事中不清楚您到底想要什么,SQL 本身根本无法解释。请您创建并提供一些示例数据以及您期望的输出。如果需要,您可以使用 SqlFiddle 或 t-SQL flex 来提供数据。
标签: sql-server date