在Microsoft SQL Server 2012的内部联接中选择第n行
My gifts表中有多行符合下面内部join语句中的条件。我想选择一个特定的行(例如第3行、第5行或第32行)。我尝试过使用Row_Number(),但它是一个窗口函数,需要在select部分中(据我所知),但这会引发错误,因为整个语句只能返回一个值 我也尝试过使用top,然后选择top的底部值(例如top 5,然后选择最后一个值),但我无法让它工作。对于下面的语句,如何修改它以同时选择第n行在Microsoft SQL Server 2012的内部联接中选择第n行,sql,sql-server,sql-server-2012,inner-join,Sql,Sql Server,Sql Server 2012,Inner Join,My gifts表中有多行符合下面内部join语句中的条件。我想选择一个特定的行(例如第3行、第5行或第32行)。我尝试过使用Row_Number(),但它是一个窗口函数,需要在select部分中(据我所知),但这会引发错误,因为整个语句只能返回一个值 我也尝试过使用top,然后选择top的底部值(例如top 5,然后选择最后一个值),但我无法让它工作。对于下面的语句,如何修改它以同时选择第n行 update output set output.gift_date01 = (select gi
update output
set output.gift_date01 = (select gifts.gift_date
where
gifts.gift_date >= '2015-1-1 00:00:00'
and gifts.gift_date <= '2015-12-31')
from output
inner join gifts on output.donor_id = gifts.donor_id;
更新输出
设置output.gift\u date01=(选择gives.gift\u date
哪里
礼品。礼品日期>='2015-1-1 00:00:00'
和礼物。礼物约会我想如果这不是你想要做的事情,这会让你接近
;WITH CTE_Gifts AS
(
SELECT
G.donor_id,
G.gift_date,
ROW_NUMBER() OVER (PARTITION BY donor_id ORDER BY gift_date) AS row_num
FROM
dbo.Gifts G
WHERE
G.gift_date BETWEEN @start_date AND @end_date
)
UPDATE O
FROM
[Output] O -- Should be renamed to not a reserved keyword
INNER JOIN CTE_Gifts C ON
C.donor_id = O.donor_id AND
C.row_num = @some_row_number
我希望您认识到,output
是SQL Server中的一个关键字,您可能不应该这样命名您的表?我不知道您是如何尝试获取第三个表(或第五个表或其他任何表)在你的声明中。我可以发布我是如何做到这一点的,但目前它没有试图在N之前得到任何结果,因为没有一个能起作用。谢谢你!这非常有效。给任何可能使用这一点的人一个提示:我必须在CTE_Gifts开始时在CTE_Gifts之后添加“AS”。谢谢,我已经更正了我的答案,将作为关键字。