我有一个SQL查询,它在id = somevalue之后选择10条记录,但是如果记录不存在,我想选择前10条记录。查询位于以下结构中。
SELECT * FROM TABLE WHERE ID > x ORDER BY METRIC LIMIT 10
提供,这里的id是一个varchar字段,它根据某个字段进行排序。
答案 0 :(得分:1)
这接近你想要的:
SELECT *
FROM TABLE
ORDER BY (CASE WHEN ID > X THEN 1 ELSE 0 END) DESC,
METRIC
LIMIT 10
它将始终返回10条记录(假设表中至少有10条记录)。它将首先放置id > x
的那些。如果没有足够的那些,那么它将填写其他记录。
答案 1 :(得分:-1)
这也有效:
SELECT TOP 10 col1, col2
FROM #yourtable
WHERE col1 > @ID
UNION ALL
SELECT TOP 10 col1, col2
FROM #yourtable
WHERE NOT EXISTS (SELECT * FROM #yourtable WHERE col1 = @ID)
但是,假设您有一个ID,您可以使用大于/小于查询所需的ID来查询所需的"接下来的"记录。此外,您可能需要添加一个" ORDER BY"确保记录具有所需值的子句。