SQL 视图返回其所基于的 SQL 查询的一些不同结果

问题描述 投票:0回答:1

我有一个按预期工作的 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 sql-server view
1个回答
0
投票

谢谢大家的评论。我将这个问题留下来,因为我认为这对于像我这样在 SQL 方面做得很好但可能很难诊断这样的事情的人来说可能很有用。

提示是,在 17K 条记录中,只有 20 条有问题,这最终向我指出了数据源。我们将 Salesforce 与大量自定义对象一起使用,数据完整性是一个问题。

对于某些记录 - 准确地说是 2 - 位置历史记录与错误的资产 ID 相关联。

其他人的发票段与错误的资产 ID 相关联,因此名称一定在某个时候已更改。

最终,我的查询和视图都是正确的,问题是我们的数据。

© www.soinside.com 2019 - 2024. All rights reserved.