我有一个按预期工作的 SQL 查询,并将其转换为视图。然后当我查询视图时,我得到了一些错误的记录,但我无法找出原因。我已经研究了这个问题并重新创建了视图,但无济于事。
这是原始查询:
SELECT
a.Name AS 'Asset Name',
invs.Asset__c AS 'Asset Id',
acc.Account_Management_Team__c AS 'Account Management Team',
SUM(
CASE
WHEN invs.Markup_Percentage__c = 0 OR invs.Markup_Percentage__c IS NULL THEN COALESCE(invs.Labor_Total__c, 0) + COALESCE(invs.Misc_Total__c, 0) + COALESCE(invs.Parts_Total__c, 0)
ELSE
ROUND(((COALESCE(invs.Labor_Total__c, 0) * (invs.Markup_Percentage__c + 100) / 100) +
(COALESCE(invs.Misc_Total__c, 0) * (invs.Markup_Percentage__c + 100) / 100) +
(COALESCE(invs.Parts_Total__c, 0) * (invs.Markup_Percentage__c + 100) / 100)),2)
END
) AS 'Grand Total Final Before Tax'
FROM dbo.Location_History__c lh
LEFT JOIN dbo.Account acc ON lh.Assigned_Account__c = acc.Id
LEFT JOIN dbo.Invoice_Segment__c invs ON lh.Id = invs.Asset_Location_History__c
LEFT JOIN dbo.Invoice__c i ON invs.Invoice__c = i.Id
LEFT JOIN dbo.Asset a ON lh.Asset__c = a.Id
WHERE
invs.[RecordTypeId] <> '0127V000000DzbDQAS' -- Exclude rentals
AND i.[Status__c] = 'Approved' -- Approved invoices only
AND invs.Repair_Category__c <> 'Contract Maintenance' -- Exclude contract maintenance
AND invs.[Repair_Category__c] IS NOT NULL
GROUP BY a.Name, invs.Asset__c, acc.Account_Management_Team__c
这是一个(正确的)示例结果:
+-----------------------+--------------------+-------------------------+------------------------------+
| Asset Name | Asset Id | Account Management Team | Grand Total Final Before Tax |
+-----------------------+--------------------+-------------------------+------------------------------+
| XXX_2C6000_AT83F42883 | 02i3t00000UPLnzAAH | XXX | 66369.70000000 |
+-----------------------+--------------------+-------------------------+------------------------------+
这是视图查询:
SELECT *
FROM [dbo].[pbi-ftf-asset-expense]
这是一个示例结果(第一行是错误的):
+-----------------------+--------------------+-------------------------+------------------------------+
| Asset Name | Asset Id | Account Management Team | Grand Total Final Before Tax |
+-----------------------+--------------------+-------------------------+------------------------------+
| XXX_2C6000_AT83F42839 | 02i3t00000UPLnzAAH | XXX | 252.07000000 |
| XXX_2C6000_AT83F42883 | 02i3t00000UPLnzAAH | XXX | 66369.70000000 |
+-----------------------+--------------------+-------------------------+------------------------------+
这里可能发生了什么,我该如何解决?在近 17K 条记录中,我总共有 20 条记录是错误的,我不知道为什么会发生这种情况。
谢谢大家的评论。我将这个问题留下来,因为我认为这对于像我这样在 SQL 方面做得很好但可能很难诊断这样的事情的人来说可能很有用。
提示是,在 17K 条记录中,只有 20 条有问题,这最终向我指出了数据源。我们将 Salesforce 与大量自定义对象一起使用,数据完整性是一个问题。
对于某些记录 - 准确地说是 2 - 位置历史记录与错误的资产 ID 相关联。
其他人的发票段与错误的资产 ID 相关联,因此名称一定在某个时候已更改。
最终,我的查询和视图都是正确的,问题是我们的数据。