0

現在、クエリに次のようなセクションがあります

, T3 AS (
          select 'FSA'            as tType, b.fsacd  as tBefore, c.fsacd  as tAfter from T1 as a , T2 as b,T2 as c where a.beforeID = b.tID and a.afterID =c.tID 
    union select 'Scale'          as tType, b.scd    as tBefore, c.scd    as tAfter from T1 as a , T2 as b,T2 as c where a.beforeID = b.tID and a.afterID =c.tID 
    union select 'Retail Source'  as tType, b.rsc    as tBefore, c.rsc    as tAfter from T1 as a , T2 as b,T2 as c where a.beforeID = b.tID and a.afterID =c.tID 
    union select 'Mix Match'      as tType, b.mmcd   as tBefore, c.mmcd   as tAfter from T1 as a , T2 as b,T2 as c where a.beforeID = b.tID and a.afterID =c.tID 
    union select 'Price Entry'    as tType, b.pecd   as tBefore, c.pecd   as tAfter from T1 as a , T2 as b,T2 as c where a.beforeID = b.tID and a.afterID =c.tID 
    union select 'Qntty Entry'    as tType, b.qecd   as tBefore, c.qecd   as tAfter from T1 as a , T2 as b,T2 as c where a.beforeID = b.tID and a.afterID =c.tID    
    union select 'Price 3 Decs'   as tType, b.p3d    as tBefore, c.p3d    as tAfter from T1 as a , T2 as b,T2 as c where a.beforeID = b.tID and a.afterID =c.tID    
    union select 'Tare Entry'     as tType, b.tecd   as tBefore, c.tecd   as tAfter from T1 as a , T2 as b,T2 as c where a.beforeID = b.tID and a.afterID =c.tID    
    union select 'Undiscountable' as tType, b.undsc  as tBefore, c.undsc  as tAfter from T1 as a , T2 as b,T2 as c where a.beforeID = b.tID and a.afterID =c.tID    
    union select 'Foodstamp'      as tType, b.fds    as tBefore, c.fds    as tAfter from T1 as a , T2 as b,T2 as c where a.beforeID = b.tID and a.afterID =c.tID    
    union select 'WIC'            as tType, b.wic    as tBefore, c.wic    as tAfter from T1 as a , T2 as b,T2 as c where a.beforeID = b.tID and a.afterID =c.tID    
)

正常に動作しますが、もっとコンパクトに見せたいと思います。fooこのように見えることをすることで同じ結果を達成できるような関数を構築する方法はありますか?

, T3 AS (
          foo('FSA'             ,fsacd  ,T1, T2 ) 
    union foo('Scale'           ,scd    ,T1, T2 ) 
    union foo('Retail Source'   ,rsc    ,T1, T2 ) 
    union foo('Mix Match'       ,mmcd   ,T1, T2 ) 
    union foo('Price Entry'     ,pecd   ,T1, T2 ) 
    union foo('Qntty Entry'     ,qecd   ,T1, T2 )   
    union foo('Price 3 Decs'    ,p3d    ,T1, T2 )   
    union foo('Tare Entry'      ,tecd   ,T1, T2 )   
    union foo('Undiscountable'  ,undsc  ,T1, T2 )   
    union foo('Foodstamp'       ,fds    ,T1, T2 )   
    union foo('WIC'             ,wic    ,T1, T2 )   
)
4

1 に答える 1

0

ここに別のオプションがありますが、それが問題を悪化させているかどうかはわかりません. これにより、with 句のエイリアスの数が増えています。ただし、UNION または UNION ALL を使用する場合は、最初のサブクエリで新しい列名を指定するだけでよいことに注意してください。

tbefore as (select *
            from T1 a join
                 T2 b
                 on a.beforeID = b.tID
             ),
 tafter as (select *
            from T1 a join
                 T2 c
                 on a.afterID = b.tID
             ),
 t3b as (select 'FSA' as tType, fsacd as tBefore from tbefore union all
         select 'Scale'as tType, scd from tbefore union all
         ...
        ),
 t3a as (select 'FSA' as tType, fsacd as tAfter from tafter union all
         select 'Scale'as tType, scd from tafter union all
         ...
        ),
 t3 as (select t3b.ttype, t3b.tbefore, t3a.tafter
        from t3b join t3a on t3b.ttype = t3a.ttype
       )
于 2012-07-17T17:50:45.540 に答える