我正在创建一个将上传到 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
如果这是一个不好的问题,我很抱歉。在我看来,我想象这在一个循环中工作,但老实说我不知道如何优化它。如果我可以提供更多信息,请告诉我。