SQL-запрос для получения нескольких адресов для поставщиков в AX 2009 - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь создать запрос, который сможет вытащить несколько адресов для поставщиков из Dynamics AX 2009. Я нашел много всего, что мне нужно на VendTable, но не все.У меня есть около 500 поставщиков с около 150, которые имеют как минимум 2 адреса.Сейчас я могу вытащить только первый адрес.

Вот мой запрос на данный момент:

SELECT ven.CREATEDDATETIME
    ,'Organization' [Party, Record Type]
    ,VEN.NAME [Party, Name]
    ,VEN.NAMEALIAS [Search Name]
    ,VEN.LANGUAGEID [Party, Language]
    ,VEN.NAME [Party Address, Name]
    ,'Business/RemitTo' [Party Address, Purpose]
    ,VEN.COUNTRYREGIONID [Party Address, Country/Region]
    ,VEN.ZIPCODE [Party Address, SIP/postal code]
    ,VEN.STREET [Party Address, Street]
    ,VEN.CITY [Party Address, City]
    ,VEN.[STATE] [Party Address, State]
    ,CON.NAME [Party Contact, Description]
    ,'Phone' [Party Contact, Type]
    ,CON.PHONE [Party Contact, Locator]
    ,'' [Party Contact, Is Primary]
    ,VEN.ACCOUNTNUM [AccountNum]
    ,VEN.VENDGROUP [VendGroup]
    ,VEN.PAYMMODE [PaymMode]
    ,VEN.PAYMTERMID [Paym Term Id]
    ,VEN.CASHDISC [CashDisc]
    ,VEN.DLVMODE [Deliver Mode]
    ,VEN.DLVTERM [DlvTerm]
    ,VEN.W9 [W9]
    ,VEN.TAX1099REPORTS [Tax 1099 Report]
    ,VEN.TAX1099BOX [Tax 1099 Box]
    ,'' [Tax 1099 Name Choice]
    ,VEN.DBA [DBA]
    ,VEN.TAX1099REGNUM [Tax 1099 Reg Num]
    ,VEN.INVENTSITEID [Invent SiteId]
    ,VEN.INVENTLOCATION [Invent Location]
    ,VEN.TAXGROUP [Sales Tax Group]

    , * 
FROM VENDTABLE VEN
LEFT JOIN CONTACTPERSON CON ON con.VENDACCOUNT = ven.ACCOUNTNUM
WHERE ven.CREATEDDATETIME > '2018-04-30'
ORDER BY VEN.ACCOUNTNUM

После этого мне нужно найти, где хранятся адреса и как они связаны, чтобы я мог получить оба адреса, когда есть большечем 1.

Я нашел таблицу Address, которая, кажется, имеет их все, но я не могу понять, как эта таблица связана с VendTable.

Также естьспособ узнать, какая таблица связана с формой в AX 2009?Я нашел некоторую информацию, которая мне нужна, в Глобальной адресной книге, но это не таблица в БД SQL.

Обновление

По советуиз @TEEKAY ниже, я искал Datamodel для AX 2009 в попытке найти соединение между таблицей Address и таблицей VendTable.Все, что я мог найти, было: Address table connection to VendTable

Однако это не работает.Таблица Address AddrRecId совпадает с VendTable RecId, но не в строках, которые действительно соответствуют данным.Обе таблицы имеют поле Name, которое содержит название компании-поставщика, например All Phase.При сопоставлении с использованием Address.AddrRecId = VendTable.RecId я получаю что-то вроде этого: Party Address Name Not Match Как видите, имена не совпадают.Но Address.AddrRecId = VendTable.RecId совпадают.

1 Ответ

0 голосов
/ 08 февраля 2019

Я наконец понял это!Именно DirPartyTable соединяет 2 таблицы следующим образом:

SELECT *
FROM VENDTABLE VEN
LEFT JOIN DIRPARTYTABLE DIR ON DIR.PARTYID = VEN.PARTYID
LEFT JOIN ADDRESS [ADD] ON [ADD].ADDRRECID = DIR.RECID AND [ADD].ADDRTABLEID = 2303

Финальный [ADD].ADDRTABLEID = 2303 был необходим, чтобы ограничить результаты только VendTable, есть еще 2 ADDRTABLEID, ноЯ полагаю, что они предназначены для CustTable и, возможно, Contact таблицы.

Кажется, что документация Microsoft ужасно устарела!

Таким образом, весь запрос теперь выглядит так:

SELECT 'Organization' [Party, Record Type]
    ,VEN.NAME [Party, Name]
    ,VEN.NAMEALIAS [Search Name]
    ,VEN.LANGUAGEID [Party, Language]
    ,VEN.NAME [Party Address, Name]
    ,CASE [ADD1].TYPE WHEN 0 THEN ''
                WHEN 1   THEN 'Invoice'
                WHEN 2   THEN 'Delivery'
                WHEN 3   THEN 'Alt. Delivery'
                WHEN 4   THEN 'SWIFT'
                WHEN 5   THEN 'Payment'
                WHEN 6   THEN 'Service'
                WHEN 7   THEN 'Home'
                WHEN 8   THEN 'Other'
                WHEN 9   THEN 'Business'
                WHEN 10  THEN 'Remit-To'
                WHEN 11  THEN 'Third-party Shipping Address'
                WHEN 100 THEN 'Remit-To'
        END AS [Party Address, Purpose]
    ,[ADD1].COUNTRYREGIONID [Party Address, Country/Region]
    ,[ADD1].ZIPCODE [Party Address, SIP/postal code]
    ,[ADD1].STREET [Party Address, Street]
    ,[ADD1].CITY [Party Address, City]
    ,[ADD1].[STATE] [Party Address, State]
    ,CASE WHEN CON.NAME IS NULL THEN NULL ELSE CON.NAME END AS [Party Contact, Description]
    ,'Phone' [Party Contact, Type]
    ,VEN.PHONE [Party Contact, Locator]
    ,'' [Party Contact, Is Primary]
    ,VEN.ACCOUNTNUM [AccountNum]
    ,VEN.VENDGROUP [VendGroup]
    ,VEN.PAYMMODE [PaymMode]
    ,VEN.PAYMTERMID [Paym Term Id]
    ,VEN.CASHDISC [CashDisc]
    ,VEN.DLVMODE [Deliver Mode]
    ,VEN.DLVTERM [DlvTerm]
    ,VEN.W9 [W9]
    ,VEN.TAX1099REPORTS [Tax 1099 Report]
    ,VEN.TAX1099BOX [Tax 1099 Box]
    ,'' [Tax 1099 Name Choice]
    ,VEN.DBA [DBA]
    ,VEN.TAX1099REGNUM [Tax 1099 Reg Num]
    ,VEN.INVENTSITEID [Invent SiteId]
    ,VEN.INVENTLOCATION [Invent Location]
    ,VEN.TAXGROUP [Sales Tax Group]
    ,[ADD].NAME [Party Address, Name]
    ,CASE [ADD].TYPE WHEN 0 THEN ''
                WHEN 1   THEN 'Invoice'
                WHEN 2   THEN 'Delivery'
                WHEN 3   THEN 'Alt. Delivery'
                WHEN 4   THEN 'SWIFT'
                WHEN 5   THEN 'Payment'
                WHEN 6   THEN 'Service'
                WHEN 7   THEN 'Home'
                WHEN 8   THEN 'Other'
                WHEN 9   THEN 'Business'
                WHEN 10  THEN 'Remit-To'
                WHEN 11  THEN 'Third-party Shipping Address'
                WHEN 100 THEN 'Remit-To'
        END AS [Party Address, Purpose]
    , [ADD].COUNTRYREGIONID [Party Address, Country/Region]
    , [ADD].ZIPCODE [Party Address, ZIP/Postal code]
    , [ADD].STREET [Party Address, Street]
    , [ADD].CITY [Party Address, City]
    , [ADD].[STATE] [Party Address, State]
FROM VENDTABLE VEN
LEFT JOIN DIRPARTYTABLE DIR ON DIR.PARTYID = VEN.PARTYID
LEFT JOIN ADDRESS [ADD] ON [ADD].ADDRRECID = DIR.RECID AND [ADD].ADDRTABLEID = 2303
    AND [ADD].STREET <> VEN.STREET
LEFT JOIN ADDRESS [ADD1] ON [ADD1].ADDRRECID = DIR.RECID AND [ADD1].ADDRTABLEID = 2303
    AND [ADD1].STREET = VEN.STREET
LEFT JOIN CONTACTPERSON CON ON CON.VENDACCOUNT = VEN.ACCOUNTNUM
WHERE VEN.CREATEDDATETIME > '2018-04-30'
ORDER BY VEN.ACCOUNTNUM
...