Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Microsoft SQL Server 2012的内部联接中选择第n行_Sql_Sql Server_Sql Server 2012_Inner Join - Fatal编程技术网

在Microsoft SQL Server 2012的内部联接中选择第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

My gifts表中有多行符合下面内部join语句中的条件。我想选择一个特定的行(例如第3行、第5行或第32行)。我尝试过使用Row_Number(),但它是一个窗口函数,需要在select部分中(据我所知),但这会引发错误,因为整个语句只能返回一个值

我也尝试过使用top,然后选择top的底部值(例如top 5,然后选择最后一个值),但我无法让它工作。对于下面的语句,如何修改它以同时选择第n行

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”。谢谢,我已经更正了我的答案,将
作为
关键字。