0

我正在创建一个将上传到 QuickBooks 的报告。由于每个查询中的单个计算更改,我必须合并所有 7 个查询。以下是前两个查询的示例:

SELECT
    Clients.Id
    ,@CNumber as 'Check Number'
    ,@TDate as 'Transac Date'
    ,CONCAT(@Memo, 'Debt') as 'Memo'
    ,Compensation.Payment as 'Amount'

FROM Compensation

    JOIN Clients on Id = Compensation.ClientId

UNION ALL

SELECT
    Clients.Id
    ,@CNumber as 'Check Number'
    ,@TDate as 'Transac Date'
    ,CONCAT(@Memo, 'Insurance') as 'Memo'
    ,InsuranceInvoices.WeeklyAmount

FROM InsuranceInvoices

有没有办法消除对每个联合重复 Clients.Id、@CNumber、@TDate、CONCAT(@Memo, Variable) 的需要?

对于 CONCAT(@MEMO, variable) as 'Memo",我也许可以创建一个数组并在 Union ALL 的每次新迭代中插入(甚至不知道这是否可能)。

我卡住的地方是,不确定如何在每次新计算“金额”时创建一个迭代前 4 列的循环。

这仅出于优化/代码可读性的目的。查询有效,而且速度不是那么慢。但是,它有 155 行长,我想知道下次我做类似的事情时是否可以尝试做不同的事情。

到目前为止我研究过的内容:下面的 Stack Overflow链接有些相似,但是,它没有使用不同的“FROM”表。数据来自单个表。我的数据来自 4 个表。下面是来自同一个表的两个查询的示例:

    SELECT
        Clients.Id
        ,@CNumber as 'Check Number'
        ,@TDate as 'Transac Date'
        ,CONCAT(@Memo, 'Debt') as 'Memo'
        ,Compensation.PaybackAmount as 'Amount'

    FROM Compensation

        JOIN Clients on Id = Compensation.ClientId

    WHERE
        Compensation.Week = @TrailingWeekEnd

UNION ALL

    SELECT
        Clients.Id
        ,@CNumber as 'Check Number'
        ,@TDate as 'Transac Date'
        ,CONCAT(@Memo, 'Vehicle') as 'Memo'
        ,Compensation.VDAccumulation as 'Amount'

    FROM ContractorSettlements

        JOIN Clients on Id = Compensation.ClientId

    WHERE
        Compensation.Week = @TrailingWeekEnd

如果这是一个不好的问题,我很抱歉。在我看来,我想象这在一个循环中工作,但老实说我不知道​​如何优化它。如果我可以提供更多信息,请告诉我。

4

1 回答 1

1

尽管您在查询中有错误的语法,但您可以使用以下

解释

  1. 仅查询从表中提取所需的数据
  2. 通过为每个表添加类型来区分数据,例如DebtVehicle
  3. 将结果与您想要的参数结合起来

询问

;with report as(
    select [Id] = ClientId,
           [Amount] = PaybackAmount,
           [Type] = 'Debt'
    Compensation c 
    where c.Week = @TrailingWeekEnd
    union all
    select ClientId,
           VDAccumulation,
           'Vehicle'
    from ContractorSettlements c
    where c.Week = @TrailingWeekEnd
)
select Id,
       [Check Number] = @CNumber,
       [Transac Date] = @TDate,
       [Memo] = Concat(@Memo,[Type]),
       Amount
from report

希望对你有帮助

于 2017-11-19T20:10:17.217 回答