将多个选择查询结果合并到SQL Server中的一个最终表中

时间:2017-01-03 07:42:21

标签: sql sql-server select merge multiple-tables

我正在使用SQL Server进行数据库管理。

我有一个存储过程,它返回所选数据的select查询。

示例:

DECLARE @table1 TABLE
    (
      UserId int, 
      FullName varchar(200),
      FirstName varchar(200),
      LastName varchar(200),
      Status varchar(10),
      Role varchar(50)
    )

我用它来返回条件明智的选择查询数据,如:

  1. 如果Role = Admin,请执行一些选择查询并插入@table1
  2. 如果Role = Employee,请执行一些选择查询并插入@table1
  3. 如果Role = Accountant,请执行一些选择查询并插入@table1
  4. 如果Role = Worker,请执行一些选择查询并插入@table1
  5. 我想要一个条件明智的列表,所以我一次又一次地调用上面的存储过程条件明智,这是耗时的,所以我想如果我在一个表中一次性将其全部用作最后一列的角色作为名称角色所以我可以在我即将到来的结果中处理条件,但不知道如何在table1的一个表中获取所有内容。

    如果有人知道如何做到这对我有帮助,那就请回答吧!

    注意:所有选择查询结果与我创建table1的结果相同。

2 个答案:

答案 0 :(得分:2)

因为你已经宣布了表@ 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
建议使用

第二,因为通过使用union的muliptle select语句收集结果集并在单个语句中插入更快,而不是多次插入,所以你可以在一个表中获得所有细节。

在后端端意味着服务器端,您可以使用实体框架或任何您喜欢使用的方法来获取角色数据:

使用实体框架:

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")

答案 1 :(得分:1)

制作所有结果集的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