2011-07-19 37 views
1

一直在使用此查詢一段時間...繼續收到錯誤「Corrosponding select-list表達式不兼容,我在每個select語句中選擇相同的#列。聯合查詢問題 - 選擇列表不兼容

create volatile table dt as (
SELECT 

      gcv.I_SYS_IDV, 
      gcv.i_pln, 
      gcv.c_typ_cov, 
      gcv.d_eff, 
      gcv.d_eff_pln, 
      gcv.c_sta, 
      gcv.d_sta, 
      gcv.c_mde_bft_fst, 
      gcv.a_bft_fst, 
      gcv.c_mde_bft_sec, 
      gcv.a_bft_sec, 
      gcv.c_mde_bft_trd, 
      gcv.a_bft_trd, 
      gcv.p_cre_hom, 
      gcv.c_cl_rsk, 
      gpv.c_val, 
      gpv.i_val, 
      gcv.c_pol, 
      gpv.i_prv 



      FROM Pearl_P.tltc906_gcv gcv, 
      pearl_p.tltc912_gpv gpv 

       WHERE gcv.i_pln > 0 
      AND gcv.i_pln = gpv.i_pln 
      and gpv.i_prv = '36' 
      and gcv.c_pol between 'lac100001' and 'lac100004' 

     UNION 

      SELECT 
      gcv.I_SYS_IDV, 
      gcv.i_pln, 
      gcv.c_typ_cov, 
      gcv.d_eff, 
      gcv.d_eff_pln, 
      gcv.c_sta, 
      gcv.d_sta, 
      gcv.c_mde_bft_fst, 
      gcv.a_bft_fst, 
      gcv.c_mde_bft_sec, 
      gcv.a_bft_sec, 
      gcv.c_mde_bft_trd, 
      gcv.a_bft_trd, 
      gcv.p_cre_hom, 
      gcv.c_cl_rsk, 
      gcv.c_pol, 
      gpv.i_val, 
      gpv.i_pln, 
      gpv.i_prv 


     FROM Pearl_P.tltc906_gcv gcv, 
     pearl_p.tltc912_gpv gpv 


      where NOT EXISTS(
      SELECT 1 
      FROM pearl_p.tltc906_gcv gcv, 
      pearl_p.tltc912_gpv gpv 

      WHERE gcv.i_pln > 0 
      AND gcv.i_pln = gpv.i_pln 
      and gpv.i_prv = '36' 
      ) 
     ) with data 
PRIMARY INDEX (i_sys_idv) 
on commit preserve rows; 
+1

投訴未必與列數分開。列的順序是否正確?例如你希望第一個查詢中的gpv.c_val和第二個查詢中的gcv.c_pol在同一列嗎?你確定數據類型是兼容的嗎?我建議先從聯合中刪除查詢並運行它直到它工作(當然只是沒有外部創建/提交的選擇)。 –

回答

0

你的第二個SELECT語句不匹配的人的最後4個值的第一個語句,嘗試命名(使用別名)這些列相同的事情(配對)。爲了結合你需要在集合之間有相同的列。

退房:http://msdn.microsoft.com/en-us/library/ms180026.aspx

以下是通過使用UNION結果組的兩個 查詢相結合的基本規則:

數和列的順序必須是在所有相同 查詢。

數據類型必須兼容。

0

您應該檢查每個列的數據類型,數據類型必須是每個SELECT語句之間的兼容。

+0

如果我從第二個查詢中刪除i_prv並添加'',那麼它運行 – gfuller40

0

查詢的兩個部分中每列的數據類型是否相同?

如果列名的第一個字符表示數據類型(i =整數,c =字符等),我猜測問題出在選擇列表中倒數第二列。第一個查詢選擇gcv.c_pol,第二個查詢選擇gpv.i_pln。

0

開始註釋行,直到它工作。即,將每個選擇列表中的所有字段註釋掉,然後逐個註釋掉第一個,然後第二個,等等。您最終會找到它。