0

ここでの問題は、出力の前半で WWDTA のデータが返されていないが、確実に一致することです。このクエリの 2 番目の部分で行っているのは、営業担当者 ID を取得し、レポートに表示する営業担当者名を取得することだけです。

CREATE VIEW astccdta.acwocmpk AS (                             
SELECT                                                         
  ALL       T01.OHORD#, T01.OHSLR#,T01.OHORDT, T01.OHORDD,     
T01.OHTTN$,  '                    ' as WWDTA                   
  FROM      ASTDTA.OEORHDOH  T01,                              
            ASTDTA.OETRANOT  T02                               
  WHERE     T01.OHORD# = T02.OTORD#                            
    AND(    T02.OTTRNC = 'WOC')                                
and T01.OHORDD > 20120101                                      
UNION ALL                                                      
SELECT                                                         
  ALL       T01.OHORD#, T01.OHSLR#, T01.OHORDT, T01.OHORDD,    
T01.OHTTN$,                                                    
            SUBSTR(RFDTA,1,20) AS WWDTA                        
  FROM      ASTCCDTA.WOCREPS T01,                              
            ASTCCDTA.REPREF1 T02                               
   WHERE     T01.OHSLR# = T02.RFSLC)   
4

3 に答える 3

1

UNION が行うことは、2 つの別個の SELECT ステートメントを取得し、それらを 1 つの結果セットに結合することです。最初の SELECT が戻ってくるとしましょう:

1 A 2013-08-01 100.00 ''
2 B 2013-08-02 200.00 ''
3 A 2013-08-03 300.00 ''

2 番目の SELECT は以下を返します。

1 A 2013-08-01 100.00 'John Smith'
2 B 2013-08-02 200.00 'Jane Jones'
3 A 2013-08-03 300.00 'John Smith'

それらを UNION すると、次のようになります。

1 A 2013-08-01 100.00 ''
2 B 2013-08-02 200.00 ''
3 A 2013-08-03 300.00 ''
1 A 2013-08-01 100.00 'John Smith'
2 B 2013-08-02 200.00 'Jane Jones'
3 A 2013-08-03 300.00 'John Smith'

最初の SELECT を営業担当者名テーブルへの JOIN に変更し、UNION と 2 番目の SELECT を完全に削除したいと考えています。

SELECT ALL 
  T01.OHORD#, T01.OHSLR#,T01.OHORDT, T01.OHORDD, T01.OHTTN$, SUBSTR(RFDTA,1,20) AS WWDTA
FROM ASTDTA.OEORHDOH T01,
     ASTDTA.OETRANOT T02,
     ASTCCDTA.REPREF1 T03
WHERE T01.OHORD# = T02.OTORD#
 AND (T02.OTTRNC = 'WOC')
 and  T01.OHORDD > 20120101
 and  T01.OHSLR# = T03.RFSLC
于 2013-08-18T13:55:29.520 に答える
0

MS SQL Server では、union キーワードを使用できます

SELECT                                                                        
  ALL       T01.OHORD#, T01.OHORDT, T01.OHORDD, T01.OHSLR#, T01.OHTTN$        
  FROM      ASTDTA/OEORH1 T01,                                                
            ASTCCDTA/OETRA99 T02                                              
  WHERE     T01.OHORD# = T02.OTORD#                                           
    AND(    T02.OTTRNC = 'WOC')      

UNION

SELECT                                                                              
  ALL       T01.OHORD#, T01.OHORDT, T01.OHORDD, T01.OHSLR#, T01.OHTTN$        
            SUBSTR(RFDTA,1,20) AS WWDTA                                             
  FROM      PKLIB/WOCREPS T01,                                                      
            PKLIB/PHILREF1 T02                                                      
  WHERE     T01.OHSLR# = T02.RFSLC   

データに重複が含まれる場合は、Union を使用します。それ以外の場合は、UNION ALL の方が効率的です (結果の重複を排除しようとしません)。

ガンダースが指摘したように、これには一致する列が必要であり、スキーマを知らずに答えを提供することは非常に困難です。

于 2013-08-16T13:37:36.440 に答える