在 Microsoft SQL Server 2012 的内部联接中选择第 n 行
Selecting nth row in Inner Join on Microsoft SQL Server 2012
我的礼物 table 有多行符合下面的内部连接语句中的条件。我想 select 特定行(例如第 3、5 或 32 行)。我试过使用 Row_Number(),但它是一个窗口函数,需要在 select 部分内(据我所知),但随后会抛出错误,因为整个语句必须return只有一个值。
我也尝试过使用 top 然后 selecting top 的底部值(例如前 5 个然后 selecting 最后一个值),但我无法得到它工作。使用下面的语句,如何将其修改为 select 第 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;
谢谢!
我认为如果这不是您想要做的,这会让您接近。
;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
我的礼物 table 有多行符合下面的内部连接语句中的条件。我想 select 特定行(例如第 3、5 或 32 行)。我试过使用 Row_Number(),但它是一个窗口函数,需要在 select 部分内(据我所知),但随后会抛出错误,因为整个语句必须return只有一个值。
我也尝试过使用 top 然后 selecting top 的底部值(例如前 5 个然后 selecting 最后一个值),但我无法得到它工作。使用下面的语句,如何将其修改为 select 第 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;
谢谢!
我认为如果这不是您想要做的,这会让您接近。
;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