【发布时间】:2014-06-11 06:38:10
【问题描述】:
我有以下查询:
SELECT st.np_trxn_dt AS transactiondate,
st.trxn_dt,
(
SELECT ISNULL(st.cheque_no, '-') + '-' + ISNULL(st.bank_name, '-') +
'-' + ISNULL(st.voucher_no, '-') + '-' + ISNULL(st.trxn_by, '-')
) AS OldDescription,
ISNULL(
(
SELECT dbo.bank_statement_remarks(
st.bank_name,
st.trxn_by,
st.sav_amt,
st.wthdrl_amt,
ISNULL(
(
SELECT NAME
FROM mem_group_mcg
WHERE group_id = sa.center_id
),
''
)
)
),
''
) AS DESCRIPTION,
(st.sav_amt) AS Saving,
st.wthdrl_amt AS Withdrawl,
ISNULL(st.remarks, '') AS remarks,
st.trxn_dt
FROM dbo.sav_transaction AS st
INNER JOIN (
SELECT DISTINCT acc_no,
center_id,
group_id
FROM sav_acc_mcg
WHERE scheme_id = '100'
GROUP BY
acc_no,
center_id,
group_id
) sa
ON st.acc_no = sa.acc_no
WHERE (st.trxn_dt BETWEEN '2013-07-17' AND '2014-01-22')
AND st.acc_no = '100-002703'
ORDER BY
st.trxn_dt
结果:
但我只需要按 trxn_dt/transactiondate 过滤/分组,如果我添加 GROUP BY 子句,则所有字段都需要添加到没有给出预期结果的子句中。我需要根据 trxn_dt 的总金额。每个交易类型我需要一个 trxn_dt 一行,即存款或取款。如果在同一日期有 3 笔存款交易,那么我需要为交易求和一行,如果在同一日期有 2 笔取款交易,那么我需要一个汇总行来进行交易。 换句话说,我需要单独的存款和取款行,但结果应该是总和。
【问题讨论】:
-
在您的查询中使用
SUM(Deposit)或SUM(Withdraw) -
如果我使用SUM,则应该添加GROUP BY子句,这不是必需的。
-
对于每一列,您想要组合的行中的所有值都相同(在这种情况下,将它们添加到
GROUP BY子句应该不是问题)或者值不同,在在这种情况下,您需要指出应该使用哪个聚合函数(例如MIN()或与金额一样,SUM())将这些多个值组合成一个 single 输出值。有什么问题? -
在几乎所有情况下。金额和日期只会有所不同,但其他字段的值相同。
标签: sql sql-server