2013-02-21 75 views
0

我在這裏有兩個單獨的查詢,我需要將它們合併到一個查詢中,然後我將發佈查詢,然後嘗試解釋我正在嘗試執行的操作。SQL加入並由3個獨立的表組合

SELECT Distinct I.ITMCDE, V.VNDRCDE, V.VNAME 
    FROM (SELECT RIGHT(Items.[Item Number], 3) as ITMCDE FROM Items) I, 
     (SELECT LEFT(Vendors.[Vendor ID], 3) as VNDRCDE, 
       Vendors.[Vendor Name] as VNAME 
      FROM Vendors) V 
WHERE I.ITMCDE = V.VNDRCDE 

在這第一個,我只是投其所好與該項目代碼的供應商代碼,獲取產生該項目的供應商名稱。

SELECT DISTINCT (Items.[Item Description]), ItemQuantities.[QTY Available], 
     Items.[Selling U Of M], Items.[Item Number] 
    FROM ItemQuantities 
INNER JOIN Items ON ItemQuantities.[Item Number] = Items.[Item Number] 
WHERE Items.[Item Number] LIKE 'WH%' 
    AND Items.[Item Number] NOT LIKE '%RMW' 

在這第二個我選擇的項目介紹,可以從兩個獨立的表數量(數量可在不同的表,搭配起來使用的項目數)

正如你所看到的,三個表格之間唯一的關聯是項目編號,甚至在供應商表格中也沒有。商品編號的最後三個字符與供應商ID的前三個字符相關...我沒有設計此設置。我只是想現在就使用它。

如何將這兩條語句合併成一個單獨的語句,它會給我供應商名稱,物品描述,度量單位(銷售M的M)以及物品描述是唯一的物料數量?

回答

0

我認爲這應該工作:

SELECT DISTINCT Items.[Item Description], 
     ItemQuantities.[QTY Available], 
     Items.[Selling U Of M], 
     Items.[Item Number], 
     V.VNAME 
FROM ItemQuantities 
    INNER JOIN Items ON ItemQuantities.[Item Number] = Items.[Item Number] 
    INNER JOIN Vendors ON 
     RIGHT(Items.[Item Number], 3) = LEFT(Vendors.[Vendor ID], 3) 
WHERE Items.[Item Number] LIKE 'WH%' 
     AND Items.[Item Number] NOT LIKE '%RMW' 
+0

使用這種和其他資源(如我不得不做出一些更多的修改),我想出了以下內容,這適合我的需要。謝謝*編輯* - 我不能回答我自己的問題,我用了另外5個小時的代碼 – Kizzelwhix 2013-02-21 16:33:05

+0

@ user2073596 - np,很高興幫助。祝你好運。 – sgeddes 2013-02-21 16:35:33

0

你可以加入它:

SELECT DISTINCT (i.[Item Description]), iq.[QTY Available], 
     i.[Selling U Of M], i.[Item Number], 
     V.VNDRCDE, V.VNAME 
FROM ItemQuantities iq INNER JOIN 
    Items i 
    ON iq.[Item Number] = i.[Item Number] left outer join 
    Vendors v 
    on LEFT(v.[Vendor ID], 3) = RIGHT(i.[Item Number], 3) 
WHERE i.[Item Number] LIKE 'WH%' and 
     i.[Item Number] NOT LIKE '%RMW' 

我不知道,如果你打算什麼特別圍繞i.[Item Description]括號。 distinct關鍵字適用於整個行。

如果您只想在描述中使用distinct,那麼您需要使用group by。例如:

SELECT i.[Item Description], 
     max(iq.[QTY Available]), 
     max(i.[Selling U Of M]), max(i.[Item Number]), 
     max(V.VNDRCDE), max(V.VNAME) 
FROM ItemQuantities iq INNER JOIN 
    Items i 
    ON iq.[Item Number] = i.[Item Number] left outer join 
    Vendors v 
    on LEFT(v.[Vendor ID], 3) = RIGHT(i.[Item Number], 3) 
WHERE i.[Item Number] LIKE 'WH%' and 
     i.[Item Number] NOT LIKE '%RMW' 
group by i.[Item Description]) 

max()將返回最大值。如果全部相同,那麼這是獲得「任意」值的好方法。

+0

我一直在尋找唯一的描述。 – Kizzelwhix 2013-02-21 16:32:33

0

@sgeddes謝謝。

這是我想出了

SELECT DISTINCT 
      Item.ITEMNMBR AS [Item Number], 
      Item.ITEMDESC AS [Item Description], 
      Item.ITMGEDSC AS [Item Category], 
      Item.SELNGUOM AS [Unit of Measure], 
      (SELECT VENDNAME FROM PM00200 WHERE (VENDORID = IV00103.VENDORID)) AS [Vendor Name], 
      (CASE WHEN Quan.QTYONHND > 0 THEN 'In Stock' ELSE 'Out of Stock' END) AS [Stock Status] 
FROM  IV00101 AS Item INNER JOIN 
         IV00102 AS Quan ON Item.ITEMNMBR = Quan.ITEMNMBR INNER JOIN 
         IV00103 ON Item.ITEMNMBR = IV00103.ITEMNMBR AND Quan.ITEMNMBR = IV00103.ITEMNMBR 
WHERE  (Item.ITEMNMBR LIKE 'WH%') AND (IV00103.VENDORID NOT LIKE '%MIL')