首页 > 解决方案 > 在 sql server 中使用虚拟数据在查询结果集中添加额外的行

问题描述

我有这张桌子让我们说学生。如果表中有 2 名学生并且结果集给出了 2 行,那么无论它说什么,即“ Dummy Record”或其他内容,我都想在其中添加 5 行带有虚拟数据的行。

SELECT FirstName, (SELECT COUNT(*) FROM Student) Total
FROM Student

如果上述查询的输出是这样的。

FirstName         Total
Isaac Frempong    2
Erick Ortiz       2

我希望输出是这样的

FirstName         Total
Isaac Frempong    2
Erick Ortiz       2
Dummy Data        2
Dummy Data        2
Dummy Data        2
Dummy Data        2
Dummy Data        2

我希望这是可以实现的,我不知道如何在这里应用 CASE 或 IF 语句。也许有人可以帮忙。

标签: sqlsql-server

解决方案


一种方法是使用VALUES()语句来构造行:

SELECT FirstName, COUNT(*) OVER () as Total
FROM Student
UNION ALL
SELECT 'Dummy', (SELECT COUNT(*)  FROM Student)
FROM (VALUES (1), (2), (3), (4), (5)) v(n);

编辑:

如果您总是想要 7 行,请使用算术:

SELECT FirstName, COUNT(*) OVER () as Total
FROM Student
UNION ALL
SELECT 'Dummy', s.total
FROM (VALUES (1), (2), (3), (4), (5), (6), (7)) v(n) CROSS JOIN
     (SELECT COUNT(*) as total FROM Student) s
WHERE v.n <= 7 - s.total;

s


推荐阅读