2017-04-10 61 views
0

合併我想並排在一個屏幕合併SQL查詢結果邊如何合併的Sql兩個SQL查詢的結果顯示在一個顯示

樣品:

Barcode1 Barcode2 
888   33 

這是可能的嗎?

非常感謝。

SELECT BARCODE AS BARCODE2 
FROM LG_001_UNITBARCODE, LG_001_ITEMS 
WHERE ITEMREF = LG_001_ITEMS.LOGICALREF 
    AND ITEMREF= 17 AND LINENR = 2; 


SELECT BARCODE AS BARCODE3 
FROM LG_001_UNITBARCODE, LG_001_ITEMS 
WHERE ITEMREF = LG_001_ITEMS.LOGICALREF 
    AND ITEMREF= 17 AND LINENR = 3; 

enter image description here

+0

這是一個很好的開始。 http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/你也應該開始使用ANSI-92風格的連接,他們一直在已經有25年了。 http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx –

+0

每個子查詢是否總是隻返回1行?如果多行的順序與他們有關係? '完全外連接並使用row_number()來將窗口函數連接在一起「將是一種方法。 – xQbert

+0

@xQbert:也許'交叉聯合'結合兩個查詢的所有值:V – TriV

回答

0

一種方法是使用一個子選擇如下:

SELECT BARCODE AS BARCODE2 , 
     (
      SELECT BARCODE AS BARCODE3 
      FROM LG_001_UNITBARCODE, LG_001_ITEMS 
      WHERE ITEMREF = LG_001_ITEMS.LOGICALREF 
       AND ITEMREF= 17 AND LINENR = 3 
     ) as BARCODE3 
FROM LG_001_UNITBARCODE, LG_001_ITEMS 
WHERE ITEMREF = LG_001_ITEMS.LOGICALREF 
AND ITEMREF= 17 AND LINENR = 2; 
+0

當子查詢返回多於1個結果時,那麼你的查詢出錯了。 – TriV

+0

那麼,在目前的情況下,只有一個值返回。 如果還有更多,應該已經指定,以及mrc用戶想要處理它的方式(作爲逗號分隔值或任何其他方式..) 如果從子查詢返回更多的值,您是對,它需要以不同的方式處理:) –

0

如果我們可以假設,如果多個行存在和不同量的結果爲每個表的(一個返回3記錄其他5)並且它們應該從每個表的條形碼順序相關...我們可以使用2個公共表表達式和一個row_number()分析。這樣,如果存在多行,那麼它們都基於分配的行號進行相關,如果一個結果集的行數多於另一行,則會出現空值。

但是,如果它是1-1,這仍然可以工作。

WITH A as (SELECT BARCODE AS BARCODE2, row_number() over (order by barcode) RN 
      FROM LG_001_UNITBARCODE, LG_001_ITEMS 
      WHERE ITEMREF = LG_001_ITEMS.LOGICALREF 
      AND ITEMREF= 17 
      AND LINENR = 2), 
    B as (SELECT BARCODE AS BARCODE3, row_number() over (order by barcode) RN 
      FROM LG_001_UNITBARCODE, LG_001_ITEMS 
      WHERE ITEMREF = LG_001_ITEMS.LOGICALREF 
      AND ITEMREF= 17 
      AND LINENR = 3) 

SELECT A.Barcode2, B.Barcode3 
FROM A 
FULL OUTER JOIN B 
on A.RN = B.RN 
; 

Row_number()RN爲我們提供了一種將條形碼asc序列中的表關聯起來的方法。完整的外連接允許我們處理一個數據集的記錄多於另一個的記錄。