2013-08-16 129 views
0

這裏的問題是,輸出的前半部分沒有返回WWDTA的數據,但肯定有匹配。我們在查詢的第二部分中所做的所有工作都是使用銷售代表ID並獲取銷售代表姓名以在報表中顯示。必須結合2查詢

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) 
+1

請標記您的DBMS系統 –

+1

這些列名和表名是什麼意思? – Amy

+2

使用UNION時,您需要兩個選擇中的列數相同。您的底部查詢具有第一個WWDTA列的額外空間。 – Schalk

回答

1

UNION所做的是取兩個單獨的SELECT語句,並將它們結合在一個結果集中,一個接一個。說你的第一個SELECT帶回:

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

和你的第二個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' 

我認爲你要改變的首先選擇加入到銷售代表名稱表中,並將UNION和第二個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 
+0

yes Buck之外,所有數據都會進入,因爲我看到的數據完全正確,因此我們正在使用WWDTA空白 –

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 ALL更有效(它並不試圖重複數據刪除你的結果)

由於甘德斯指出這需要列匹配,這是很難提供一個不知道你的模式的答案。

+3

在2個不同的select語句中有不同的列... – ganders

+0

@ganders好點! – Liath

+0

是的,這是我的事我目前有2個查詢,但想要1個查詢/ –

2

問題是第二個SELECT在最後有一個額外的列。

系統提供給您的線索是UNION的兩邊之間的列數不一致。

在第一個SELECT列表的末尾添加一個額外的空char(20)列以匹配它,那麼您應該在那裏確定。但請檢查第一個SELECT中的每列與第二個,中的相應列是否以相同的順序出現。

正如其他人指出的,你可能想要UNION ALL。

+0

沃倫,唯一的問題是我沒有得到WWDTA。我在第一部分中作爲WWDTA。但是除了WWDTA –