查询从同一个表,多列中获取数据

时间:2016-12-16 14:37:42

标签: sql-server

有人可以帮助我。

我正在解释下面的例子 -

不,不完全是。我有一个表格,其中收集的数据是以客户收取的形式或收入以及客户付款。因此,假设收取的收入是3次,即2016年12月18日,2016年12月19日和2016年12月20日每次收费5000,客户付款是在2016年12月19日,金额为7000.00,然后是20 -12-2016,金额2000.00。此表中的条目插入为 -

TableName - Temp1

CustidId Amount pdate amount2 1 5000.00 18-12-2016 0.00 1 5000.00 19-12-2016 0.00 1 0.00 19-12-2016 7000.00 1 5000.00 20-12-2016 0.00 1 0.00 20-12-2016 2000.00

我需要以下面的格式输出这个表 -

Custid InDate Outdate TotalRev PaymentDate PaymentAmount 1 18-12-2016 20-12-2016 15000.00 19-12-2016 7000.00 1 18-12-2016 20-12-2016 20-12-2016 2000.00

此数据适用于1位客户,同样可以有多个客户,因此基于custid,必须显示收入和收款的数据。上面示例中的第二行可以将In Date和out date作为空白,但第二行中的TotalRev列必须为空或零。

请帮助我。

4 个答案:

答案 0 :(得分:0)

SELECT
    Id
    , pdate
    , SUM(amount2) AS amount2
    , SUM(Amount) AS Amount
FROM
    Temp1
GROUP BY
    Id, pdate;

答案 1 :(得分:0)

您可以像这样查询...

SELECT ID, Pdate, max(Amount) as Amount, max(amount2) as Amount2)
   from temp1 group by Id, Pdate 

答案 2 :(得分:0)

您可以使用group by clause汇总记录。

该组应包含列的列表,您希望从中获得所有唯一组合。

您可以将群组与一个或多个aggregated functions合并,例如SUMMINMAX。将列传递给这些函数将返回(例如)group by子句返回的每个给定组合的该列的总和。

-- Total amount and amount2 for each combination of Id and PDate .
SELECT 
    t1.id,
    SUM(t1.amount)    AS amount,
    t2.pdate,
    SUM(t2.amount2)   AS amount2
FROM
    temp1 t1
        join temp1 t2     on  t1.id = t2.id 
                          and t2.amount2 >0 where t1.amount1 >0 
GROUP BY
    t1.id,
    t2.pdate
;

答案 3 :(得分:-1)

据我了解,每pdate列需要一笔金额,对吗?

如果是这样,您可以使用此查询:

select t1.id, SUM(t1.amount),t1.pdate, SUM(t1.amount2) from temp1 t1
group by t1.id, t1.pdate