2015-01-09 51 views
0

我嘗試了所有可能的連接和子查詢,但無法獲取數據以僅返回表2中與供應商ID完全匹配的一個值。如果我沒有包含在查詢中的地址,我會得到一個供應商ID。我怎樣才能做到這一點,以便當我添加地址時,我只需要我添加地址之前獲得的一個供應商。只返回與表1上的ID相匹配的值

表1中的供應商必須是VEN-CLASS IS NOT NULL。

Image from the query

這是我最後一次嘗試使用子查詢:

SELECT DISTINCT APVENMAST.VENDOR_GROUP, 
      APVENMAST.VENDOR, 
      APVENMAST.VENDOR_VNAME, 
      APVENMAST.VENDOR_CONTCT, 
      APVENMAST.TAX_ID, 
      Subquery.ADDR1 
FROM (TEST.dbo.APVENMAST APVENMAST 
    INNER JOIN 
    (SELECT APVENADDR.ADDR1, 
      APVENADDR.VENDOR_GROUP, 
      APVENADDR.VENDOR, 
      APVENMAST.VEN_CLASS 
     FROM TEST.dbo.APVENADDR APVENADDR 
      INNER JOIN TEST.dbo.APVENMAST APVENMAST 
       ON  (APVENADDR.VENDOR_GROUP = APVENMAST.VENDOR_GROUP) 
        AND (APVENADDR.VENDOR = APVENMAST.VENDOR) 
     WHERE (APVENMAST.VEN_CLASS IS NOT NULL)) Subquery 
     ON  (APVENMAST.VENDOR_GROUP = Subquery.VENDOR_GROUP) 
      AND (APVENMAST.VENDOR = Subquery.VENDOR)) 
    INNER JOIN TEST.dbo.APVENLOC APVENLOC 
     ON  (APVENMAST.VENDOR_GROUP = APVENLOC.VENDOR_GROUP) 
     AND (APVENMAST.VENDOR = APVENLOC.VENDOR) 
WHERE (APVENMAST.VEN_CLASS IS NOT NULL) 
+0

看起來都在你的屏幕截圖返回的值是不同的,相對於選中的列(即供應商ID似乎被關聯到多個地址。)你怎麼知道哪些地址是你想要的嗎?使用返回的供應商地址是否有關係? – Daileyo 2015-01-09 23:46:36

回答

0

試試這個:

SELECT APVENMAST.VENDOR_GROUP 
, APVENMAST.VENDOR 
, APVENMAST.VENDOR_VNAME 
, APVENMAST.VENDOR_CONTCT 
, APVENMAST.TAX_ID 
, APVENADDR.ADDR1 
FROM TEST.dbo.APVENMAST APVENMAST 
INNER JOIN (
    select VENDOR_GROUP, VENDOR, ADDR1 
    , row_number() over (partition by VENDOR_GROUP, VENDOR order by ADDR1) r 
    from TEST.dbo.APVENADDR 
) APVENADDR 
ON APVENADDR.VENDOR_GROUP = APVENMAST.VENDOR_GROUP 
AND APVENADDR.VENDOR = APVENMAST.VENDOR 
AND APVENADDR.r = 1 
--do you need this table; you're not using it... 
--INNER JOIN TEST.dbo.APVENLOC APVENLOC 
--ON APVENMAST.VENDOR_GROUP = APVENLOC.VENDOR_GROUP 
--AND APVENMAST.VENDOR = APVENLOC.VENDOR 
WHERE APVENMAST.VEN_CLASS IS NOT NULL 
--if the above inner join was to filter results, you can do this instead: 
and exists (
    select top 1 1 
    from TEST.dbo.APVENLOC APVENLOC 
    ON APVENMAST.VENDOR_GROUP = APVENLOC.VENDOR_GROUP 
    AND APVENMAST.VENDOR = APVENLOC.VENDOR 
) 
+0

謝謝@JohnBevan!出於某種原因,查詢需要永遠運行。然而,我在APVENLOC表中找到了另一列,可以過濾以獲得唯一的供應商。如果供應商地址用於主辦公室,則供應商位置設置爲空白。 – Shaji 2015-01-11 15:49:34

0

我發現在APVENLOC表中的另一列,我可以篩選,以獲得獨特的廠商。如果供應商地址用於主辦公室,則供應商位置設置爲空白。

比我想象的要容易!

SELECT DISTINCT APVENMAST.VENDOR_GROUP, 
      APVENMAST.VENDOR, 
      APVENMAST.VENDOR_VNAME, 
      APVENADDR.ADDR1, 
      APVENMAST.VENDOR_SNAME, 
      APVENADDR.LOCATION_CODE, 
      APVENMAST.VEN_CLASS 
FROM TEST.dbo.APVENMAST APVENMAST 
    INNER JOIN TEST.dbo.APVENADDR APVENADDR 
     ON  (APVENMAST.VENDOR_GROUP = APVENADDR.VENDOR_GROUP) 
     AND (APVENMAST.VENDOR = APVENADDR.VENDOR) 
WHERE (APVENADDR.LOCATION_CODE = ' ') 

沙基