【问题标题】:Combine multiple select query result into one final table in SQL Server在 SQL Server 中将多个选择查询结果合并到一个最终表中
【发布时间】:2017-05-17 06:11:58
【问题描述】:

我将 SQL Server 用于数据库目的。

我有一个存储过程,它返回其中选定数据的选择查询。

例子:

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

我想要一个除了条件之外的所有列表,所以我一次又一次地调用上面的存储过程角色,以便我可以在即将到来的结果中执行 where 条件,但不知道如何将所有内容都放在一个 table1 中。

如果有人知道如何做到这一点,这对我有帮助,请回答!

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

【问题讨论】:

  • 您无需在主题行中提及 dbms,因为它已正确标记。
  • 您可能需要更改您的存储过程。如果我们能看到代码,也许我们可以提供帮助。
  • 您的问题很详细,但如果您提供一些示例数据并解释您试图使用该示例数据实现的目标,那就没问题了。
  • 前端用的是什么?去掉存储过程中的角色条件或者直接消费代码中的表,在前端根据条件过滤
  • 只有简单的选择查询,唯一的变化是角色来数据是管理员或会计或员工或工人。

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


【解决方案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

【讨论】:

  • 很高兴您真的给出了答案,但我很困惑使用您或 MV 的答案的答案,但我正在尝试,因为我像 MV 的答案一样提出了这个问题,所以如果我仍然继续它出错了,最好使用什么,请告诉我。谢谢
  • @padhiyar:我们也不知道。我们不知道您为什么决定使用存储过程或为什么决定使用临时表。也许使用一个简单的查询就足够了。也许是一个观点。也许您的单独查询彼此之间并没有太大差异,因此可以将它们合并到一个更小更快的查询中。所以答案是:这取决于。如果您对 0MV1' 的答案感到满意,请找到它可读且合适的答案,然后机智地处理它。通常有几种方法可以实现一个目标。选择你理解和喜欢的解决方案。
  • @JibinBalachandran 感谢您的指导,但是如果我使用 Uninon all 而不是 insert into 有什么区别?是否有任何耗时或一些重大差异?
  • @padhiyar:差异应该可以忽略不计。使用此处显示的UNION ALL 解决方案,只需执行一个INSERT 语句,优化器可能会或可能不会比四个单独的语句执行得更快。
  • @JibinBalachandran 好的,我会的
【解决方案2】:

正如你已经声明了表@table1

如果除了您所写的角色之外所有查询都没有变化,只需将您的选择查询插入@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

或者你也可以在下面使用(推荐 - Jibin 的回答)

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 的多个 select 语句收集结果集并在单个语句中插入,这比多个 insert 更快,因此您可以在一个表中获取所有详细信息。

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

ex 使用实体框架:

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

【讨论】:

  • 我很困惑使用你的答案或 Jibin 的答案,但我正在尝试,因为我像你写的那样问了这个问题,所以我继续这个。谢谢
  • 很高兴为您提供帮助。
  • 您也可以使用 Jibin 的答案,因为通过带有 union 的多个 select 语句收集结果集并插入到单个语句中,这比多个 insert 更快。
猜你喜欢
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-02
相关资源
最近更新 更多