将多行显示为SQL Server 2008的一行

时间:2014-12-10 10:07:59

标签: sql sql-server sql-server-2008 stored-procedures

我有以下查询。

enter image description here

执行后我的结果就是这个。

enter image description here

但问题是在这里发票号'I261001001S000371'有2条记录。我希望显示为1条记录。发票现金金额和支票金额的手段应显示在一行中。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

将您的选择语句更改为SUM CashCheque以及CreditGROUP BY InvoiceNo, NetAmount, Settle

这样,每张发票都会显示您在Case语句中指定的每个列的总数,并将其全部放在一行中

答案 1 :(得分:1)

尝试此查询:使用汇总功能汇总所有发票号码的所有现金。我不确定和解。您可以使用聚合,IF需要。

SELECT InVoiceNo, sum(cash), sum(cheque), 
     sum(credit), NetAmount, Settle
from
  (--Your select query to get result as specified in question) as a
group by InVoiceNo, NetAmount, Settle

答案 2 :(得分:1)

您可以使用带有CTE的Over-clauseInvoiceNo总结它们:

WITH CTE AS
(
   SELECT InvoiceNo, NetAmount, Settle, Credit,
          RN =  ROW_NUMBER()   OVER ( PARTITION BY InvoiceNo ORDER BY InvoiceNo ),
          Cash =   SUM(CASH)   OVER ( PARTITION BY InvoiceNo ),
          Cheque = SUM(Cheque) OVER ( PARTITION BY InvoiceNo ),
          Credit = SUM(Credit) OVER ( PARTITION BY InvoiceNo )
   FROM dbo.InvoiceHeader -- ... and other tables ...
)
SELECT InvoiceNo, NetAmount, Settle, Cash, Cheque, Credit
FROM CTE WHERE RN = 1