基于行计数的联合表

  • 本文关键字:于行计 sql sql-server
  • 更新时间 :
  • 英文 :


如何基于行数联合表

例如,假设我有10个表,并且必须选择下面的前10行

  1. 如果table1有10行,则返回10行。

  2. 如果table1有5行,则合并table2并返回前10行(如果行计数>10则不合并table3等)

  3. 如果table1有3行,table2有2行,则与表3合并并返回前10行,依此类推

我当前的SQL查询如下,但这一个联合所有表并返回前10名,这是不性能(我认为)。

SELECT TOP 10  NAME FROM(
SELECT TOP 10 NAME FROM TABLE1 WHERE NAME LIKE '%abc%'
UNION
SELECT TOP 10 NAME FROM TABLE2 WHERE NAME LIKE '%abc%'
UNION
..
..
SELECT TOP 10 NAME FROM TABLE10 WHERE NAME LIKE '%abc%'
) AS RESULT

你可能需要这样的东西吗?

IF (SELECT COUNT(*) FROM A) = 3 
begin
select * from A
end
else
select * from A
Union all
select * from B

演示

您可以做的是为每个表添加额外的列,指定其位置,然后按该列排序,并取前10行

SELECT TOP (10)
NAME
FROM (
SELECT NAME, 1 AS Ordering
FROM TABLE1
WHERE NAME LIKE '%abc%'
UNION ALL
SELECT NAME, 2
FROM TABLE2
WHERE NAME LIKE '%abc%'
UNION ALL
..
..
SELECT NAME, 10
FROM TABLE10
WHERE NAME LIKE '%abc%'
) AS RESULT
ORDER BY
Ordering;

相关内容

  • 没有找到相关文章