Ben*_*ter 23 t-sql sql-server sql-server-2000
我有一张发票表和一张与钥匙有关的相关数据的子表.特别是,对于每个发票,我只对子表中的第一个相关行感兴趣.鉴于我希望每个发票密钥都有一个相关的行 - 我该如何做到这一点?
Select i.[Invoice Number],
c.[Carrier Name]
From Invoice i
Left Join Carriers c on i.[InvoiceKey] = c.[InvoiceKey]
Where -- what?
Run Code Online (Sandbox Code Playgroud)
我想在语义上讲,我正在寻找类似于概念的东西Top 1 c.CarrierName Group by InvoiceKey(或者如果在T-SQL中可能的话那将是什么概念.)
我考虑过在子查询上进行左连接,但这看起来效率不高.有没有人有任何T-SQL技巧来有效地实现这一目标?
编辑:对不起,伙计们,我忘了提到这是SQL Server 2000,所以虽然我将放弃当前SQL Server 2005/2008响应的投票,但我不敢接受它们.
Qua*_*noi 31
只要Carriers有一个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
)
Run Code Online (Sandbox Code Playgroud)