Объединение результатов запроса множественного выбора в одну итоговую таблицу в SQL Server
Я использую SQL Server для базы данных.
У меня есть хранимая процедура, которая возвращает запрос выбора выбранных данных в нем.
Пример:
DECLARE @table1 TABLE
(
UserId int,
FullName varchar(200),
FirstName varchar(200),
LastName varchar(200),
Status varchar(10),
Role varchar(50)
)
Я использовал это, чтобы возвратить данные запроса выбора мудрого условия как:
- если
Role = Admin
, выберите запрос и вставьте в@table1
- если
Role = Employee
, выберите запрос и вставьте в@table1
- если
Role = Accountant
, выберите запрос и вставьте в@table1
- если
Role = Worker
, выберите запрос и вставьте в@table1
Мне нужен список всех условий, кроме условных, поэтому я снова и снова вызываю хранимую процедуру, условием, что это отнимает много времени, поэтому я подумал, что если я возьму все это сразу в одну таблицу с Ролью в последнем столбце в качестве имени роли, чтобы я я могу выполнить условие условия в моем следующем результате, но не знаю, как взять все в одной таблице table1.
Если кто-то знает, как это сделать, это полезно для меня, ответьте, пожалуйста!
ПРИМЕЧАНИЕ. Все результаты запроса на выборку такие же, как я создал таблицу1.
2 ответа
Как вы уже объявили таблицу @table1
Просто напишите ваш запрос на выборку с помощью insert в @table1, если нет изменений во всех запросах, кроме роли, которую вы написали.
Пример:
Insert into @table1
your query where Role = Admin
Insert into @table1
your query where Role = Employee
Insert into @table1
your query where Role = Accountant
Insert into @table1
your query where Role = Worker
Или вы можете использовать ниже (рекомендуется - ответ Джибина)
Insert into @table1
your query where Role = Admin
UNION ALL
your query where Role = Employee
UNION ALL
your query where Role = Accountant
UNION ALL
your query where Role = Worker
Второе рекомендуется, потому что хорошо собирать набор результатов с помощью множественного оператора выбора с объединением и вставлять в один оператор, который выполняется быстрее, чем множественные вставки, так что вы можете получить все детали в одной таблице.
На серверной стороне означает серверную часть, которую вы можете использовать для ролевых данных, используя структуру сущностей или любой другой метод, который вы когда-либо предпочитаете использовать:
Например, используя структуру объекта:
var data = db.storedprocedurename("parameter").ToList();
var adminData = data.where(r => r.Role == "Admin")
var accoutantData = data.where(r => r.Role == "Accountant")
var employeeData = data.where(r => r.Role == "Employee")
var workerData = data.where(r => r.Role == "Worker")
Делать UNION
всего набора результатов, а затем вставьте его в @table1
, Что-то вроде
Insert into @table1
your 1st select query with extra column role
UNION ALL
your 2nd select query with extra column role
UNION ALL
your 3rd select query with extra column role
UNION ALL
your 4th select query with extra column role