我试图根据三个不同的列找到唯一的行
以下是我撰写的查询,但收到错误
查询表达式中的语法错误(缺少运算符)' row_number()OVER(按F1分区BY F1,F2,F3)
这是查询
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工作表中提取数据。提前谢谢。
这是我的C#代码
OleDbDataAdapter data = new OleDbDataAdapter(query, conn);
data.Fill(ds);
答案 0 :(得分:0)
如果您要求SQL Sevrer提取具有3个不同值的行,那么尝试获取行号并没有多大意义。
假设两行做在其中有相同的3个值...它应返回哪个行号?
您应该使用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
但是,RANK()
在您想要在按行显示这些3个不同的值进行分组之后,在行之间找到“最近的某些内容或其他内容”时非常有用。
如果您感兴趣的是在表格中获得不同的3值组合列表,您会发现只需执行GROUP BY
更简单:
SELECT F1, F2, F3
FROM tblName
GROUP BY F1, F2, F3
希望这有帮助。