.net I';我想知道是否有人能帮我改进我的T-SQL查询,这样我就可以从另一个表中检索money列的总和…:)

.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

首先,非常感谢您在这方面帮助我。我当前的查询(如下)的工作方式是我希望它保存标题中提到的要求:我需要检索我的“费用”表中货币列的总和,并且这些值中的每一个都必须对应于大于@FISCALIEAREND的期间结束值,正如此行中的其他总和值所实现的那样:

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

这个答案给了我正确的方向,问题解决了,谢谢。)