将多个 select 查询结果组合成一个最终 table 在 SQL 服务器
Combine multiple select query result into one final table in SQL Server
我将 SQL 服务器用于数据库目的。
我有一个存储过程,其中 return 是 select 查询其中的 selected 数据。
示例:
DECLARE @table1 TABLE
(
UserId int,
FullName varchar(200),
FirstName varchar(200),
LastName varchar(200),
Status varchar(10),
Role varchar(50)
)
我已经用它来 return 条件明智 select 查询数据,例如:
- 如果
Role = Admin
,做一些 select 查询并插入 @table1
- 如果
Role = Employee
,做一些 select 查询并插入 @table1
- 如果
Role = Accountant
,做一些 select 查询并插入 @table1
- 如果
Role = Worker
,做一些 select 查询并插入 @table1
我想要一个除了条件之外的所有列表,所以我一次又一次地调用上面的存储过程,这很耗时,所以我想如果我一次把它全部放在一个 table 和 Role 中最后一列作为 Role 的名称,所以我可以在即将到来的结果中执行 where 条件,但不知道如何将所有内容都放在一个 table 中,即 table1.
如果有人知道如何做到这一点对我有帮助,请回答!
注意:所有 select 查询结果与我创建的 table1.
相同
将所有结果集做一个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
因为您已经声明了 table @table1
如果除了您所写的角色之外的所有查询都没有变化,只需编写您的 select 查询并插入 @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
推荐使用 second,因为可以通过带有 union 的多个 select 语句收集结果集,并在单个语句中插入,这比多次插入更快,因此您可以在一个语句中获取所有详细信息 table.
在后端意味着服务器端你可以使用 entity framework 或任何你喜欢使用的方法来获取角色明智的数据:
ex 使用 entity framework:
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")
我将 SQL 服务器用于数据库目的。
我有一个存储过程,其中 return 是 select 查询其中的 selected 数据。
示例:
DECLARE @table1 TABLE
(
UserId int,
FullName varchar(200),
FirstName varchar(200),
LastName varchar(200),
Status varchar(10),
Role varchar(50)
)
我已经用它来 return 条件明智 select 查询数据,例如:
- 如果
Role = Admin
,做一些 select 查询并插入@table1
- 如果
Role = Employee
,做一些 select 查询并插入@table1
- 如果
Role = Accountant
,做一些 select 查询并插入@table1
- 如果
Role = Worker
,做一些 select 查询并插入@table1
我想要一个除了条件之外的所有列表,所以我一次又一次地调用上面的存储过程,这很耗时,所以我想如果我一次把它全部放在一个 table 和 Role 中最后一列作为 Role 的名称,所以我可以在即将到来的结果中执行 where 条件,但不知道如何将所有内容都放在一个 table 中,即 table1.
如果有人知道如何做到这一点对我有帮助,请回答!
注意:所有 select 查询结果与我创建的 table1.
相同将所有结果集做一个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
因为您已经声明了 table @table1
如果除了您所写的角色之外的所有查询都没有变化,只需编写您的 select 查询并插入 @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
推荐使用 second,因为可以通过带有 union 的多个 select 语句收集结果集,并在单个语句中插入,这比多次插入更快,因此您可以在一个语句中获取所有详细信息 table.
在后端意味着服务器端你可以使用 entity framework 或任何你喜欢使用的方法来获取角色明智的数据:
ex 使用 entity framework:
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")