【问题标题】:Is it possible to encapsulate sql-select result?是否可以封装 sql-select 结果?
【发布时间】:2014-04-27 04:29:32
【问题描述】:

简单的 SQL 查询:

(select e.lastName as Name, count(o.orderid) as numOrd from
Employees e join Orders o on e.employeeid=o.employeeid
group by e.lastName)

结果

布坎南 42
卡拉汉 104
达沃利奥 123
多兹沃思 43

我的问题是如何在 SQL 中实现类似的功能:

let queryResult = 
(select e.lastName as Name, count(o.orderid) as numOrd from
Employees e join Orders o on e.employeeid=o.employeeid
group by e.lastName)

然后写这样的东西,这将是输出:

select AVG(qr.numOrd) from queryResult qr

是否可以不创建任何新表?

【问题讨论】:

  • 当然,检查表变量。
  • 为什么不只是 CTE?这些适用于“别名”,并允许查询规划器优化整个操作。否则,如果出于任何原因需要强制执行结果,则可以使用 SELECT INTO tv

标签: sql sql-server select


【解决方案1】:

是的,但为什么不只是这样:

select count(o.orderid) / count (distinct e.employeeid) AvgNumOrder
  from orders

派生表、CTE、子查询、临时表、表变量都可以满足您的要求,但都不需要。

【讨论】:

    【解决方案2】:

    SQL Server Views

    您可以将视图定义为

    create view queryResult as
    select e.lastName as Name, count(o.orderid) as numOrd from
    Employees e join Orders o on e.employeeid=o.employeeid
    group by e.lastName;
    

    【讨论】:

      【解决方案3】:

      您可能想使用a Common Table Expression (CTE)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-18
        • 2019-03-09
        • 2012-09-04
        • 2014-08-24
        • 1970-01-01
        • 2012-11-03
        • 1970-01-01
        相关资源
        最近更新 更多