我有一张发票表和一个关键数据相关数据的子表.特别是,对于每张发票,我只对子表中的第一个相关行感兴趣.鉴于我想要每个发票密钥的一个相关行 – 我该如何实现?
Select i.[Invoice Number],c.[Carrier Name] From Invoice i Left Join Carriers c on i.[InvoiceKey] = c.[InvoiceKey] Where -- what?
我猜在语义上,我正在寻找类似于InvoiceKey的Top 1 c.CarrierName Group的概念的东西(或者如果在T-sql中可能的话,那么它的概念是什么).
我想过在子查询上做一个左连接,但是似乎效率并不高.有没有人有任何T-sql技巧来有效地实现这一点?
编辑:对不起,我忘了提到这是sql Server 2000,所以当我要放弃当前的sql Server 2005/2008响应,这将是有效的,我不能接受他们恐怕.
解决方法
只要操作符有一个PRIMARY KEY称为id:
SELECT i.[Invoice Number],c.[Carrier Name] FROM Invoice i JOIN Carriers c ON c.id = ( SELECT TOP 1 ID FROM Carriers ci WHERE ci.InvoiceKey = i.InvoiceKey ORDER BY id -- or whatever )