Sql 在其中使用 row_number 时查询给出错误缺少运算符
Sql Query giving error missing operator while using row_number in it
我正在尝试根据三个不同的列查找唯一的行
这是我编写的查询,但出现错误
Syntax error (missing operator) in query expression 'row_number() OVER ( partition BY F1, F2,F3 order by F1)
这里是查询
SELECT F1, F2, F3
FROM
(SELECT
*,
ROW_NUMBER() OVER (PARTITION BY F1, F2, F3 ORDER BY F1) AS rn
FROM
tblName) a
WHERE rn = 1
有人可以找出这个查询有什么问题吗?
我在 C# 程序中使用这个查询来使用 oledb 从 Excel sheet 中提取数据。提前致谢。
这是我的 C# 代码
OleDbDataAdapter data = new OleDbDataAdapter(query, conn);
data.Fill(ds);
如果您要求 SQL Sevrer 获取包含您的 3 个不同值的行,那么尝试获取行号并没有多大意义。
假设两行 do 中有相同的 3 个值...它应该是什么行号 return ?
您应该做的是将 RANK()
(而不是行号)与 PARTITION
一起使用,并使用“WHERE RANK = 1
”过滤器对其进行过滤。
这里有一个很好的例子:
RANK
SELECT F1, F2, F3
FROM
(SELECT F1, F2, F3, RANK() OVER (PARTITION BY F1, F2, F3 ORDER BY F1) AS rn
FROM tblName) a
WHERE rn = 1
但是,当您想要跨行查找 "the most recent something-or-other" 时,RANK()
在按这 3 个不同的值分组后最有用。
如果您只对在 table 中获取不同的 3 值组合列表感兴趣,您会发现只需执行 GROUP BY
:
SELECT F1, F2, F3
FROM tblName
GROUP BY F1, F2, F3
希望这对您有所帮助。
我正在尝试根据三个不同的列查找唯一的行
这是我编写的查询,但出现错误
Syntax error (missing operator) in query expression 'row_number() OVER ( partition BY F1, F2,F3 order by F1)
这里是查询
SELECT F1, F2, F3
FROM
(SELECT
*,
ROW_NUMBER() OVER (PARTITION BY F1, F2, F3 ORDER BY F1) AS rn
FROM
tblName) a
WHERE rn = 1
有人可以找出这个查询有什么问题吗?
我在 C# 程序中使用这个查询来使用 oledb 从 Excel sheet 中提取数据。提前致谢。
这是我的 C# 代码
OleDbDataAdapter data = new OleDbDataAdapter(query, conn);
data.Fill(ds);
如果您要求 SQL Sevrer 获取包含您的 3 个不同值的行,那么尝试获取行号并没有多大意义。
假设两行 do 中有相同的 3 个值...它应该是什么行号 return ?
您应该做的是将 RANK()
(而不是行号)与 PARTITION
一起使用,并使用“WHERE RANK = 1
”过滤器对其进行过滤。
这里有一个很好的例子: RANK
SELECT F1, F2, F3
FROM
(SELECT F1, F2, F3, RANK() OVER (PARTITION BY F1, F2, F3 ORDER BY F1) AS rn
FROM tblName) a
WHERE rn = 1
但是,当您想要跨行查找 "the most recent something-or-other" 时,RANK()
在按这 3 个不同的值分组后最有用。
如果您只对在 table 中获取不同的 3 值组合列表感兴趣,您会发现只需执行 GROUP BY
:
SELECT F1, F2, F3
FROM tblName
GROUP BY F1, F2, F3
希望这对您有所帮助。