2015-01-09 52 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 = ' ') 

沙基