SELECT 0表示多行连接

时间:2012-07-10 10:54:33

标签: tsql

我有一个invoices和一个payments表。

对于每个invoice记录(包含OriginalInvoiceValue字段),付款表中可能会有多笔付款相关联。在加入两个表的select中,每个invoice记录当然会在每次出现关联的payment记录时重复出现。

我想要的是,每OriginalInvoiceValue只返回一次invoice字段,然后让每个字段返回0(或NULL)发生相关的payment记录。 (如果我要将数据导出为ex​​cel并将OriginalInvoiceValue列相加,我实际得到所有发票的实际总数,而不是将其与每次额外付款相乘)。

这在T-SQL中是否可行?

1 个答案:

答案 0 :(得分:1)

如果是Sql Server 2005或更新版本,您可以将行号分配给发票的个别付款,并将联系保留为仅选择第一次付款的实际发票记录的发票。您需要在row_number()部分中下订单;我选择了PaymentID,但付款日期可能更合适。

; with p as (
  select *,
         row_number() over (partition by InvoiceID
                            order by PaymentID) rn
    from payments
)
select *
  from p
  left join invoices i
    on p.InvoiceID = i.InvoiceID
   and p.rn = 1
order by p.InvoiceID, rn

And here is SQL FIDDLE with example