0

我有一个简单的表 TBL,由两列 Err_type 和 Val 组成。需要从中选择所有日期。似乎很简单,但是当特定行不存在时,它会变得更加丑陋。

with cte as (
select TBL.Err_type, TBL.Val from TBL
where TBL.Err_type = 4 or TBL.Err_type = 2
)

select * from cte

在给定的日期时间范围内可能不存在“4”或“2”。所以我需要插入缺失的行(Err_type 为“4”或“2”,Val 为“0”),然后获取表格。

例如

 Err_type | Val     
 ---------------
     4    | 50
     2    |  0 

代替

 Err_type | Val     
 ---------------
     4    | 50
4

1 回答 1

0

使用以下 sql 将检查记录是否存在,如果未找到则插入。

WITH cte 
     AS (SELECT * 
         FROM   TBL 
         WHERE  TBL.Err_Type IN ( 4, 2 ) 
         UNION 
         SELECT 4, 
                0 
         WHERE  NOT EXISTS (SELECT 1 
                            FROM   TBL 
                            WHERE  TBL.Err_Type = 4) 
         UNION 
         SELECT 2, 
                0 
         WHERE  NOT EXISTS (SELECT 1 
                            FROM   TBL 
                            WHERE  TBL.Err_Type = 2)) 
SELECT * 
FROM   cte 
于 2012-05-14T13:05:22.093 回答