Group By在SQL Server中,过滤结果仅涉及一个字段

时间:2014-06-11 06:38:10

标签: sql sql-server

我有以下查询:

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

结果: enter image description here

但我需要仅通过trxn_dt / transactiondate过滤/分组,如果我添加GROUP BY子句,则需要将所有字段添加到不能给出所需结果的子句中。我需要根据trxn_dt的金额。我需要一行一个trxn_dt每个转换类型,即存款或取款。如果在同一日期有3笔存款交易,那么我需要一个汇总行进行交易,如果在同一日期有2个撤销交易,那么我需要一个汇总的行进行交易。 换句话说,我需要单独的行进行存款和提款,但结果应该是相加的。

2 个答案:

答案 0 :(得分:1)

您是要尝试过滤还是尝试分组?只有在使用聚合函数(我在您发布的查询中没有看到)时,分组才有意义。如果您希望您的结果根据交易日期汇总,那么您无论如何都不能容纳其他信息,例如支票号等,因为会有多个支票。

答案 1 :(得分:0)

试试这个

SUM(Deposit) OVER(partition by transactiondate) as totaldeposit