我需要连接 3 个表(Bill、BillPayment 和 BillPaymentLineItem)中的数据。
BillPayment 和 BillPaymentLineItem 有一个简单的链接,因为 BillPayment 上的“Id”字段镜像在 BillPaymentLineItem 上的“BillPaymentId”字段中。
但是,从 Bill 到其他表的唯一链接是使用名为“LinkedTxn”的字段,其中包含 Bill ID 以及一些其他数据。值得庆幸的是,格式是统一的,所以我可以使用 SUBSTRING("LinkedTxn", 12, 5) 来获取 ID。
但是,每当我尝试加入该法案时,我都会收到 LinkedTxn 的不明确列错误。
我当前的查询是:
SELECT Bill.DocNumber, BillPayment.TxnDate, BillPayment.DocNumber, BillPayment.TotalAmt, Amount, BillPaymentID, SUBSTRING("LinkedTxn", 12, 5) AS "BillID"
FROM BillPaymentLineItem
JOIN BillPayment ON BillPaymentLineItem.BillPaymentId = BillPayment.Id
JOIN Bill ON SUBSTRING(BillPaymentLineItem.LinkedTxn, 12, 5) = Bill.Id
如果我删除第 1 行中对“Bill.DocNumber”的引用以及整个第 4 行,它运行正常。当包含这些内容时,我收到错误“不明确的列'LinkedTxn'”,即使我已经清楚地引用了它旁边的表,并且相同的语法在第 1 行中工作以显示 ID。我也尝试过只使用“BillID”,因为我之前定义了它,但它说它无法识别。
如有任何帮助,我们将不胜感激。
作为参考,我正在使用集成平台来查询 QuickBooks Online。
您可以在列名称之前添加前缀,以根据您的示例指定正确的表。当您在多个表中出现相同的列名时,这是需要的。
我还用表别名缩短了前缀(使用
AS [alias]
关键字)以便于输入,但这是可选的。
SELECT b.DocNumber,
p.TxnDate,
p.DocNumber,
p.TotalAmt,
Amount,
BillPaymentID,
SUBSTRING(li.LinkedTxn, 12, 5) AS BillID -- added prefix
FROM BillPaymentLineItem AS li
JOIN BillPayment AS p
ON li.BillPaymentId = p.Id
JOIN Bill AS b
ON b.Id = SUBSTRING(li.LinkedTxn, 12, 5)