Как объединить таблицу и агрегировать данные по полю, отличному от ключа - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь объединить несколько таблиц в Dynamics AX и получить всю информацию по A.PARTYID в 1 строке. Однако я должен объединить другие таблицы в более подробных отношениях.

В настоящее время я пытаюсь объединить следующие таблицы следующим образом:

SELECT 
A.PARTYID
,C.EMAIL
,C.PHONE
,C.RECID
FROM DIRPARTYTABLE A

LEFT JOIN DIRPARTYECOMMUNICATIONRELA2608 B
ON B.PARTYID = A.PARTYID

LEFT JOIN DIRECOMMUNICATIONADDRESS C
ON C.RECID = B.RECID

WHERE
B.PARTYID = 00000225

И вот результат:

PARTYID     MAIL                PHONE         RECID
000000225   asdf@gmail.com      NULL          5637146657
000000225   NULL                0612345678    5637176698

Однако я хочу собрать информацию по PARTYID и не указывать RECID, поскольку мне это не интересно, например:

PARTYID     MAIL                PHONE         
000000225   asdf@gmail.com      0612345678    

У кого-нибудь есть предложения, как я могу настроить код, чтобы он работал?

Извините, вопрос может показаться расплывчатым, поскольку я не совсем знаю, какие ключевые слова использовать для его описания.

С уважением, Игорь

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Это должно работать

SELECT  SQ1.PARTYID,
        MAX(SQ1.MAIL) AS Mail,
        MAX(SQ1.PHONE) AS Phone
FROM    (
            VALUES  ('000000225','asdf@gmail.com',NULL,5637146657),
                    ('000000225',NULL,'0612345678',5637176698)
        ) AS SQ1(PARTYID,MAIL,PHONE,RECID)
GROUP   BY SQ1.PARTYID;
0 голосов
/ 31 октября 2018

Разве ты не можешь просто

SELECT 
      A.PARTYID
     ,MAX(C.EMAIL) Email
     ,MAX(C.PHONE) Phone
FROM DIRPARTYTABLE A
LEFT JOIN DIRPARTYECOMMUNICATIONRELA2608 B
ON B.PARTYID = A.PARTYID
LEFT JOIN DIRECOMMUNICATIONADDRESS C
ON C.RECID = B.RECID
WHERE
B.PARTYID = '00000225' --00000225 is a string not a number
GROUP BY A.PARTYID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...