0

Err_typeとValの2つの列で構成される単純なテーブルTBLがあります。そこからすべての日付を選択する必要があります。単純なように見えますが、特定の行が存在しない場合は醜くなります。

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 に答える