Добавьте дополнительные строки в набор результатов запроса с фиктивными данными на сервере SQL - PullRequest
3 голосов
/ 27 марта 2019

У меня есть эта таблица, скажем, студенты. Если в таблице 2 студента и набор результатов дает 2 строки, я хочу добавить еще 5 строк с фиктивными данными, независимо от того, что там написано, т. Е. «Dummy Record» или что-то в этом роде.

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. Может быть, кто-то может помочь.

Ответы [ 2 ]

4 голосов
/ 27 марта 2019

Один метод заключается в использовании оператора 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);

EDIT:

Если вы всегда хотите 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

2 голосов
/ 27 марта 2019

Вот код, работающий над таблицей varaibale, которую я назвал @ Students

Пожалуйста, замените его на свой собственный стол

Я заполнил эту таблицу некоторыми данными и проверил различные случаи (количество записей меньше 7 или больше 7, и работал, как вы хотите!)

1) Сначала создайте таблицу переменных с именем @mytable, которая будет заполнена n записями

n будет равно 7, если количество записей в таблице ваших учеников равно или меньше 7

n будет количеством записей в таблице учеников, если оно больше 7

2) Затем выполните правое внешнее соединение между таблицей ученика, к которой вы добавляете номер записи с помощью функции CTE, row_number ().

enter image description here

declare @students as table(id int identity(1,1),firstname nvarchar(50))

insert into @students(firstname) values
('Ali ben Hassine'),
('Mohamed el Aabed'),
('Ali ben Hassine'),
('Mohamed el Aabed'),
('Mohamed el Aabed'),
('Tahar Harbi'),
('Hassine Ayari'),
('Ihsen Trabelsi'),
('Marwa Mostari'),
('Mourad Zmerli'),
('Hafedh Gabsi'),
('Miloud Filali');

declare @mytab as table(n int)
declare @n as int
select @n=count(distinct(firstname))  from @students 
if @n<7 set @n=7
declare @i as int
set @i=1
while @i <@n+1
begin
insert into @mytab values(@i)
set  @i=@i+1
end;



with cte as
(select row_number() over(partition by 1 order by firstname) r#,firstname,count(1) Total from @students group by firstname)
select isnull(cte.firstname,'Dummy') firstanme,isnull(cte.total,2) Total from cte
right outer join @mytab t2 on cte.r#=t2.n
 [![enter image description here][1]][1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...