检索客户的主地址状态

Retrieve Primary Address state of customer

我正在尝试通过 SQL 填写客户主地址的服务器检索状态。

首先我 正在尝试使用以下查询:

DATABASE.dbo.LOGISTICSPOSTALADDRESS AS LPA ON DATABASE.dbo.DIRPARTYTABLE.RECID = LPA.PRIVATEFORPARTY LEFT OUTER JOIN
DATABASE.dbo.LOGISTICSADDRESSSTATE ON DATABASE.dbo.LOGISTICSADDRESSSTATE.STATEID = LPA.STATE

之后我一直在尝试在 DirPartyTable 上加入 LogisticsLocation,然后在 LogisticsPostalAddress 上加入 LogisticsLocation。这给了我结果,但是有不同状态的双重记录。对于主要地址,我只需要 1 个结果。我怎样才能做到这一点?

给你。显然更改客户帐户。这会获取主地址的状态,但如果您出于某种原因需要它,它也有完整的主地址。

需要注意的是 LogisticsPostalAddress table 是 "Valid Time State" table。这意味着记录有一个 from/to 它们是有效的。

您想要这样做的原因是,如果您在 123 South St 有一个客户,您创建了一个销售订单并向他发送了一张印有该地址的发票,然后您稍后将客户的主要地址更改为654 North St。好吧,如果他们要求重新打印他们的旧发票,您要确保以前的地址仍然存在。

我的查询需要注意的一件事是,我没有检查 GetUTCDate() SQL 函数和 AX 存储 date/time 的方式之间的时区是否正确。这将是一个微小的差异,但需要考虑。

这里有风景:

SELECT a.STATE
FROM DIRPARTYPOSTALADDRESSVIEW AS a
WHERE a.ISPRIMARY = 1
    AND a.VALIDTO > GETUTCDATE()
    AND EXISTS (
        SELECT PARTY
        FROM CUSTTABLE AS b
        WHERE b.PARTY = a.PARTY
            AND b.ACCOUNTNUM = 'AAATest' /*Change This*/
        )

这里使用了一些 tables:

SELECT d.STATE
FROM CUSTTABLE a
JOIN dirpartytable b ON b.RECID = a.PARTY
JOIN LOGISTICSLOCATION c ON c.RECID = b.PRIMARYADDRESSLOCATION
JOIN LOGISTICSPOSTALADDRESS d ON d.LOCATION = c.RECID
WHERE d.VALIDTO > GETUTCDATE()
    AND a.ACCOUNTNUM = 'AAATest' /*Change This*/