将多行显示为一行SQL Server 2008
我有一个问题 我执行后的结果是这样的 但发票编号为“I261001001S0000371”的问题在这里,有2条记录。我想显示为一张唱片。表示发票现金金额和支票金额应显示在一行中将多行显示为一行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函数汇总所有发票号的所有常用现金。我不确定结算方式。如果需要,可以使用
有什么想法吗?请将您的select对账单更改为
SUM
theCash
和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
子句中的某项内容相反