[英]Insert values into temp Table with Partition By
If have a temporary table declared as following: 如果有一个临时表声明如下:
CREATE TABLE #tempKleerkast(
id INT IDENTITY NOT NULL PRIMARY KEY,
IDKleerkastPersoon int,
ID_Persoon int,
rk int
)
Now i wish to fill up the table with the values from an actual table where i want to get the latest (Not Max) record for each person. 现在我希望用实际表中的值填充表格,我希望获得每个人的最新 (非最大)记录。 Therefor i'm using the following query:
因此我使用以下查询:
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
The problem is where is when i wish to use insert into as following: 问题是我何时希望使用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
I get the following error: Invalid column name 'rk'. 我收到以下错误: 列名称'rk'无效。 Any idea why he doesn't recognise the column rk?
知道为什么他不承认列rk?
Note: The column rk is needed further on in the stored procedure. 注意:存储过程中需要进一步使用列rk。 So i can't exclude it.
所以我不能排除它。
No, the problem comes before you write the INSERT
. 不,问题出现在你编写
INSERT
之前。 Try running just the plain SELECT
and you'll see exactly the same error. 尝试只运行普通的
SELECT
,你会看到完全相同的错误。 Logically , WHERE
runs before SELECT
so you can't refer to aliases introduced by the latter in the former. 从逻辑上讲 ,
WHERE
在SELECT
之前运行,因此您无法在前者中引用后者引入的别名。
This should work: 这应该工作:
INSERT INTO #tempKleerkast(IDKleerkastPersoon,ID_Persoon,rk)
SELECT IDKleerkastPersoon, ID_Persoon, rk
FROM (
SELECT
IDKleerkastPersoon, 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) t
WHERE rk = 1
(I also removed the DISTINCT
since one of the columns listed was also a column listed in the PARTITION BY
clause and we're only selecting one row from each partition) (我还删除了
DISTINCT
因为列出的列之一也是PARTITION BY
子句中列出的列,我们只从每个分区中选择一行)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.