.net I';我想知道是否有人能帮我改进我的T-SQL查询,这样我就可以从另一个表中检索money列的总和…:)
首先,非常感谢您在这方面帮助我。我当前的查询(如下)的工作方式是我希望它保存标题中提到的要求:我需要检索我的“费用”表中货币列的总和,并且这些值中的每一个都必须对应于大于@FISCALIEAREND的期间结束值,正如此行中的其他总和值所实现的那样:.net I';我想知道是否有人能帮我改进我的T-SQL查询,这样我就可以从另一个表中检索money列的总和…:),.net,sql,tsql,.net,Sql,Tsql,首先,非常感谢您在这方面帮助我。我当前的查询(如下)的工作方式是我希望它保存标题中提到的要求:我需要检索我的“费用”表中货币列的总和,并且这些值中的每一个都必须对应于大于@FISCALIEAREND的期间结束值,正如此行中的其他总和值所实现的那样: JOIN statement so ON so.patron_number = producer.patron_number AND so.period_ending > @FiscalYearEnd 以下是整个查询: SELECT patr
JOIN statement so ON so.patron_number = producer.patron_number AND so.period_ending > @FiscalYearEnd
以下是整个查询:
SELECT
patron_name,
federal_number,
hst_number,
average_bf_test,
statement_number,
period_ending,
SUM(quota_payment) AS quota_payment,
SUM(total_deductions) AS total_deductions,
SUM(net_cheque_or_direct_deposit) AS net_cheque_or_direct_deposit,
SUM(interim_payment) AS interim_payment,
SUM(final_payment) AS final_payment
FROM (SELECT patron_name,
producer.federal_number,
hst_number,
average_bf_test,
(
SELECT MAX(s.statement_number)
FROM statement s
) AS statement_number,
(
SELECT MAX(s.period_ending)
FROM statement s
) AS period_ending,
sums.*
FROM producer
JOIN producer_details
ON producer_details.federal_number = producer.federal_number
JOIN statement so
ON so.patron_number = producer.patron_number AND so.period_ending > @FiscalYearEnd
CROSS APPLY
(
SELECT SUM(quota_payment) AS quota_payment,
SUM(total_deductions) AS total_deductions,
SUM(net_cheque_or_direct_deposit) AS net_cheque_or_direct_deposit,
SUM(interim_payment) AS interim_payment,
SUM(final_payment) AS final_payment
FROM payment p
WHERE p.statement_number = so.statement_number
) sums
WHERE producer.patron_number = @PatronNo) a
GROUP BY
patron_name,
federal_number,
hst_number,
average_bf_test,
statement_number,
period_ending
以下是我的费用表中的示例数据:
cgm_validation milk_promotion_and_adv trucking loan_capital dfns_producer_dues
0.0 387.41 950.25 487.34 134.92
0.0 525.67 812.47 501.12 162.93
sundry_deduction credited_to_account hst statement_number
4987.56 0.0 182.34 386
5620.34 0.0 234.28 387
如果需要更多信息,请告诉我。再次感谢您提供的任何帮助。无需任何测试。我认为下面的查询将使您沿着正确的方向前进,同时也纠正可能出现的问题(例如性能、重复工作、不必要的分组或联接)。看看下面的内容,让我知道它是如何运作的
SELECT patron_name
,federal_number
,hst_number
,average_bf_test
,statement_number
,period_ending
,payments.quota_payments_sum AS quota_payment
,payments.total_deductions_sum AS total_deductions
,payments.net_cheque_or_direct_deposit_sum AS net_cheque_or_direct_deposit
,payments.interim_payment_sum AS interim_payment
,payments.final_payment_sum AS final_payment
,expenses.milk_promotion_and_adv_sum AS milk_promotion_and_adv_expense
FROM producer
--JOIN producer_details ON producer_details.federal_number = producer.federal_number
JOIN [statement] so ON so.patron_number = producer.patron_number AND so.period_ending > @FiscalYearEnd
CROSS APPLY
(
SELECT SUM(quota_payment) AS quota_payment_sum,
SUM(total_deductions) AS total_deductions_sum,
SUM(net_cheque_or_direct_deposit) AS net_cheque_or_direct_deposit_sum,
SUM(interim_payment) AS interim_payment_sum,
SUM(final_payment) AS final_payment_sum
FROM payment p
WHERE p.statement_number = so.statement_number
) payments
CROSS APPLY
(
SELECT SUM(milk_promotion_and_adv) AS milk_promotion_and_adv_sum,
-- etc
FROM expenses e
WHERE e.statement_number = so.statement_number
) expenses
这个答案给了我正确的方向,问题解决了,谢谢。)