sql-server – 如何加入子查询的第一行?

前端之家收集整理的这篇文章主要介绍了sql-server – 如何加入子查询的第一行?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一张发票表和一个关键数据相关数据的子表.特别是,对于每张发票,我只对子表中的第一个相关行感兴趣.鉴于我想要每个发票密钥的一个相关行 – 我该如何实现?
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
        )

猜你在找的MsSQL相关文章