【发布时间】:2014-02-05 01:48:14
【问题描述】:
如果有一个临时表声明如下:
CREATE TABLE #tempKleerkast(
id INT IDENTITY NOT NULL PRIMARY KEY,
IDKleerkastPersoon int,
ID_Persoon int,
rk int
)
现在我希望用实际表中的值填充表,我想在该表中获取每个人的 最新(非最大值)记录。因此我使用以下查询:
SELECT
DISTINCT IDKleerkastPersoon AS Expr1, kk.ID_Persoon,
ROW_NUMBER() OVER (PARTITION BY kk.ID_Persoon
ORDER BY kk.IDKleerkastPersoon DESC) AS rk
FROM KleerkastPerPersoon kk
WHERE kk.ID_Persoon IS NOT NULL AND rk = 1
问题是我希望在哪里使用 insert into,如下所示:
INSERT INTO #tempKleerkast(IDKleerkastPersoon,ID_Persoon,rk)
SELECT
DISTINCT IDKleerkastPersoon AS Expr1, kk.ID_Persoon,
ROW_NUMBER() OVER (PARTITION BY kk.ID_Persoon
ORDER BY kk.IDKleerkastPersoon DESC) AS rk
FROM KleerkastPerPersoon kk
WHERE kk.ID_Persoon IS NOT NULL AND rk = 1
我收到以下错误:列名“rk”无效。 知道为什么他不认识 rk 列吗?
注意: 在存储过程中需要进一步的列 rk。所以我不能排除它。
【问题讨论】:
-
问题是关于我的 sql 语句(语法)。与使用 sql-server(产品)无关。因此标签 sql 而不是 sql-server
-
但是你应该为你正在使用的任何 other 具体数据库添加一个标签; SQL 标准中没有定义很多东西,但它们因供应商而异……(例如,并非所有数据库供应商和系统都支持
OVER(PARTITION BY...)构造……) -
修改了标签!它现在应该包含 sql-servertag。我会牢记在未来更清楚地指定它
标签: sql sql-server temp-tables sql-insert row-number