将多行显示为一行SQL Server 2008

将多行显示为一行SQL Server 2008,sql,sql-server,sql-server-2008,stored-procedures,Sql,Sql Server,Sql Server 2008,Stored Procedures,我有一个问题 我执行后的结果是这样的 但发票编号为“I261001001S0000371”的问题在这里,有2条记录。我想显示为一张唱片。表示发票现金金额和支票金额应显示在一行中 有什么想法吗?请将您的select对账单更改为SUMtheCash和check和Credit列按发票分组否、NetAmount、结算 这样,每张发票都将显示您在案例报表中指定的每一列的总数,并在一行中全部获得。请尝试以下查询:使用aggrigate函数汇总所有发票号的所有常用现金。我不确定结算方式。如果需要,可以使用

我有一个问题

我执行后的结果是这样的

但发票编号为“I261001001S0000371”的问题在这里,有2条记录。我想显示为一张唱片。表示发票现金金额和支票金额应显示在一行中


有什么想法吗?

请将您的select对账单更改为
SUM
the
Cash
check
Credit
按发票分组否、NetAmount、结算


这样,每张发票都将显示您在案例报表中指定的每一列的总数,并在一行中全部获得。请尝试以下查询:使用aggrigate函数汇总所有发票号的所有常用现金。我不确定结算方式。如果需要,可以使用aggrigate

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
您可以使用带有CTE的,根据
InvoiceNo
对其进行汇总:

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

要将其显示在一行中,您需要拿出一些逻辑来显示金额的来源。发票是否仅以现金/支票/信用证支付,还是有其他方式?或者,如果你不想细分,只需删除现金/支票/信用卡即可columns@Matt:但未提及信用证:“对于该发票,现金金额和支票金额应显示在第一行”。然而,我认为OP理解逻辑。我知道,但你可以打赌,这是必要的;)@马特:任务完成;)您不应该
SUM(NetAmount)
。您的结果将是正确的,因为您在
GROUP BY
子句中有它,但它与
SUM
子句中的某项内容相反