如果我有以下主从关系:
owner_tbl auto_tbl --------- -------- owner ---> owner auto year
我有下表数据:
owner_tbl auto_tbl --------- -------- john john, corvette, 1968 john, prius, 2008 james james, f-150, 2004 james, cadillac, 2002 james, accord, 2009 jeff jeff, tesla, 2010 jeff, hyundai, 1996
现在,我想执行一个返回以下结果的查询:
john, corvette, 1968 jeff, hyundai, 1996 james, cadillac, 2002
查询应该连接两个表,并对“年”字段上的所有记录进行排序,但只返回每个主记录的第一条详细记录。我知道如何连接表并在“年”字段上排序,但不清楚如何(或是否)我可能只能检索每个所有者的第一个连接记录。
三个相关问题:
- 我可以使用 LINQ-to-SQL 执行这种查询吗?
- 我可以使用 T-SQL 执行查询吗?
- 鉴于其可能的复杂性,最好只为查询创建一个存储过程吗?
最佳答案
使用 Sql Server 2005+ 您可以尝试(完整示例)
DECLARE @owner_tbl TABLE(
[owner] VARCHAR(50)
)
DECLARE @auto_tbl TABLE(
[owner] VARCHAR(50),
[auto] VARCHAR(50),
[year]VARCHAR(4)
)
INSERT INTO @owner_tbl SELECT 'john'
INSERT INTO @owner_tbl SELECT 'james'
INSERT INTO @owner_tbl SELECT 'jeff'
INSERT INTO @auto_tbl SELECT 'john','corvette','1968'
INSERT INTO @auto_tbl SELECT 'john','prius','2008'
INSERT INTO @auto_tbl SELECT 'james','f-150','2004'
INSERT INTO @auto_tbl SELECT 'james','cadillac','2002'
INSERT INTO @auto_tbl SELECT 'james','accord','2009'
INSERT INTO @auto_tbl SELECT 'jeff','tesla','2010'
INSERT INTO @auto_tbl SELECT 'jeff','hyundai','1996'
;WITH Autos AS(
SELECT *,
ROW_NUMBER() OVER(PARTITION BY a.owner ORDER BY a.year) ROWID
FROM @auto_tbl a
)
SELECT *
FROM Autos
WHERE ROWID = 1
ORDER BY owner
关于sql - 只查询每条主记录的第一条明细记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2399792/