And here is my SQL Query used for this question, i retrieve all SO invoices for last 2 years.
by checking the case if the customer have an invoice account or not, and if have Invoice address or not.
SELECT
sales.SALESID AS [Sales order],
sales.CUSTACCOUNT AS [Cust account],
sales.INVOICEACCOUNT AS [Invoice account],
(CASE WHEN sales.INVOICEACCOUNT != sales.CUSTACCOUNT AND sales.INVOICEACCOUNT != ''
THEN
(SELECT CASE WHEN (SELECT TOP 1 LOGISTICSLOCATION.DESCRIPTION +', '+ LOGISTICSPOSTALADDRESS.STREET +', '+ LOGISTICSPOSTALADDRESS.ADDRESS +', '+ LOGISTICSPOSTALADDRESS.ZIPCODE +', '+ LOGISTICSPOSTALADDRESS.CITY +', '+ LOGISTICSPOSTALADDRESS.COUNTRYREGIONID
FROM DIRPARTYLOCATION, DIRPARTYLOCATIONROLE, LOGISTICSLOCATION, LOGISTICSLOCATIONROLE,LOGISTICSPOSTALADDRESS
WHERE LOGISTICSPOSTALADDRESS.LOCATION = LOGISTICSLOCATION.RecId
AND LOGISTICSLOCATIONROLE.TYPE = '1' --9 Business / 1 Invoice >
AND DIRPARTYLOCATION.LOCATION = LOGISTICSLOCATION.RECID
AND DIRPARTYLOCATION.PARTY = (SELECT TOP 1 CUSTTABLE.PARTY FROM CUSTTABLE WHERE CUSTTABLE.ACCOUNTNUM = sales.INVOICEACCOUNT AND CUSTTABLE.DATAAREAID = '304' AND sales.DATAAREAID = '304')
AND DIRPARTYLOCATION.RECID = DIRPARTYLOCATIONROLE.PARTYLOCATION
AND DIRPARTYLOCATIONROLE.LOCATIONROLE = LOGISTICSLOCATIONROLE.RECID)IS NULL
--AND DIRPARTYLOCATION.ISPRIMARY = 1)
THEN
(SELECT TOP 1 LOGISTICSLOCATION.DESCRIPTION +', '+ LOGISTICSPOSTALADDRESS.STREET +', '+ LOGISTICSPOSTALADDRESS.ADDRESS +', '+ LOGISTICSPOSTALADDRESS.ZIPCODE +', '+ LOGISTICSPOSTALADDRESS.CITY +', '+ LOGISTICSPOSTALADDRESS.COUNTRYREGIONID
FROM DIRPARTYLOCATION, DIRPARTYLOCATIONROLE, LOGISTICSLOCATION, LOGISTICSLOCATIONROLE,LOGISTICSPOSTALADDRESS
WHERE LOGISTICSPOSTALADDRESS.LOCATION = LOGISTICSLOCATION.RecId
AND LOGISTICSLOCATIONROLE.TYPE = '9' --9 Business / 1 Invoice >
AND DIRPARTYLOCATION.LOCATION = LOGISTICSLOCATION.RECID
AND DIRPARTYLOCATION.PARTY = (SELECT TOP 1 CUSTTABLE.PARTY FROM CUSTTABLE WHERE CUSTTABLE.ACCOUNTNUM = sales.INVOICEACCOUNT AND CUSTTABLE.DATAAREAID = '304' AND sales.DATAAREAID = '304')
AND DIRPARTYLOCATION.RECID = DIRPARTYLOCATIONROLE.PARTYLOCATION
AND DIRPARTYLOCATIONROLE.LOCATIONROLE = LOGISTICSLOCATIONROLE.RECID)
--AND DIRPARTYLOCATION.ISPRIMARY = 1)
ELSE
(SELECT TOP 1 LOGISTICSLOCATION.DESCRIPTION +', '+ LOGISTICSPOSTALADDRESS.STREET +', '+ LOGISTICSPOSTALADDRESS.ADDRESS +', '+ LOGISTICSPOSTALADDRESS.ZIPCODE +', '+ LOGISTICSPOSTALADDRESS.CITY +', '+ LOGISTICSPOSTALADDRESS.COUNTRYREGIONID
FROM DIRPARTYLOCATION, DIRPARTYLOCATIONROLE, LOGISTICSLOCATION, LOGISTICSLOCATIONROLE,LOGISTICSPOSTALADDRESS
WHERE LOGISTICSPOSTALADDRESS.LOCATION = LOGISTICSLOCATION.RecId
AND LOGISTICSLOCATIONROLE.TYPE = '1' --9 Business / 1 Invoice >
AND DIRPARTYLOCATION.LOCATION = LOGISTICSLOCATION.RECID
AND DIRPARTYLOCATION.PARTY = (SELECT TOP 1 CUSTTABLE.PARTY FROM CUSTTABLE WHERE CUSTTABLE.ACCOUNTNUM = sales.INVOICEACCOUNT AND CUSTTABLE.DATAAREAID = '304' AND sales.DATAAREAID = '304')
AND DIRPARTYLOCATION.RECID = DIRPARTYLOCATIONROLE.PARTYLOCATION
AND DIRPARTYLOCATIONROLE.LOCATIONROLE = LOGISTICSLOCATIONROLE.RECID)
--AND DIRPARTYLOCATION.ISPRIMARY = 1)
END)
ELSE
(SELECT CASE WHEN (SELECT TOP 1 LOGISTICSLOCATION.DESCRIPTION +', '+ LOGISTICSPOSTALADDRESS.STREET +', '+ LOGISTICSPOSTALADDRESS.ADDRESS +', '+ LOGISTICSPOSTALADDRESS.ZIPCODE +', '+ LOGISTICSPOSTALADDRESS.CITY +', '+ LOGISTICSPOSTALADDRESS.COUNTRYREGIONID
FROM DIRPARTYLOCATION, DIRPARTYLOCATIONROLE, LOGISTICSLOCATION, LOGISTICSLOCATIONROLE,LOGISTICSPOSTALADDRESS
WHERE LOGISTICSPOSTALADDRESS.LOCATION = LOGISTICSLOCATION.RecId
AND LOGISTICSLOCATIONROLE.TYPE = '1' --9 Business / 1 Invoice >
AND DIRPARTYLOCATION.LOCATION = LOGISTICSLOCATION.RECID
AND DIRPARTYLOCATION.PARTY = (SELECT TOP 1 CUSTTABLE.PARTY FROM CUSTTABLE WHERE CUSTTABLE.ACCOUNTNUM = sales.CUSTACCOUNT AND CUSTTABLE.DATAAREAID = '304' AND sales.DATAAREAID = '304')
AND DIRPARTYLOCATION.RECID = DIRPARTYLOCATIONROLE.PARTYLOCATION
AND DIRPARTYLOCATIONROLE.LOCATIONROLE = LOGISTICSLOCATIONROLE.RECID)IS NULL
--AND DIRPARTYLOCATION.ISPRIMARY = 1)
THEN
(SELECT TOP 1 LOGISTICSLOCATION.DESCRIPTION +', '+ LOGISTICSPOSTALADDRESS.STREET +', '+ LOGISTICSPOSTALADDRESS.ADDRESS +', '+ LOGISTICSPOSTALADDRESS.ZIPCODE +', '+ LOGISTICSPOSTALADDRESS.CITY +', '+ LOGISTICSPOSTALADDRESS.COUNTRYREGIONID
FROM DIRPARTYLOCATION, DIRPARTYLOCATIONROLE, LOGISTICSLOCATION, LOGISTICSLOCATIONROLE,LOGISTICSPOSTALADDRESS
WHERE LOGISTICSPOSTALADDRESS.LOCATION = LOGISTICSLOCATION.RecId
AND LOGISTICSLOCATIONROLE.TYPE = '9' --9 Business / 1 Invoice >
AND DIRPARTYLOCATION.LOCATION = LOGISTICSLOCATION.RECID
AND DIRPARTYLOCATION.PARTY = (SELECT TOP 1 CUSTTABLE.PARTY FROM CUSTTABLE WHERE CUSTTABLE.ACCOUNTNUM = sales.CUSTACCOUNT AND CUSTTABLE.DATAAREAID = '304' AND sales.DATAAREAID = '304')
AND DIRPARTYLOCATION.RECID = DIRPARTYLOCATIONROLE.PARTYLOCATION
AND DIRPARTYLOCATIONROLE.LOCATIONROLE = LOGISTICSLOCATIONROLE.RECID)
--AND DIRPARTYLOCATION.ISPRIMARY = 1)
ELSE
(SELECT TOP 1 LOGISTICSLOCATION.DESCRIPTION +', '+ LOGISTICSPOSTALADDRESS.STREET +', '+ LOGISTICSPOSTALADDRESS.ADDRESS +', '+ LOGISTICSPOSTALADDRESS.ZIPCODE +', '+ LOGISTICSPOSTALADDRESS.CITY +', '+ LOGISTICSPOSTALADDRESS.COUNTRYREGIONID
FROM DIRPARTYLOCATION, DIRPARTYLOCATIONROLE, LOGISTICSLOCATION, LOGISTICSLOCATIONROLE,LOGISTICSPOSTALADDRESS
WHERE LOGISTICSPOSTALADDRESS.LOCATION = LOGISTICSLOCATION.RecId
AND LOGISTICSLOCATIONROLE.TYPE = '1' --9 Business / 1 Invoice >
AND DIRPARTYLOCATION.LOCATION = LOGISTICSLOCATION.RECID
AND DIRPARTYLOCATION.PARTY = (SELECT TOP 1 CUSTTABLE.PARTY FROM CUSTTABLE WHERE CUSTTABLE.ACCOUNTNUM = sales.CUSTACCOUNT AND CUSTTABLE.DATAAREAID = '304' AND sales.DATAAREAID = '304')
AND DIRPARTYLOCATION.RECID = DIRPARTYLOCATIONROLE.PARTYLOCATION
AND DIRPARTYLOCATIONROLE.LOCATIONROLE = LOGISTICSLOCATIONROLE.RECID)
--AND DIRPARTYLOCATION.ISPRIMARY = 1)
END)
END)
AS [Invoice address]
FROM SALESTABLE sales
WHERE sales.CREATEDDATETIME >= DATEADD(year,-2,GETDATE())
AND sales.DATAAREAID = '304'
ORDER BY sales.CREATEDDATETIME, sales.SALESID