繁体   English   中英

SQL server management studio 子查询

[英]SQL server management studio subquery

我正在尝试在 SQL Server management Studio 2016 中运行此子查询,但它出错了。 它适用于 MySQL。 请指教:

select count(distinct company) 
from 
(
select company, sum(net_value_gbp) as last2yr_spend 
from Orders 
where bill_date >='01-Jan-2016' 
group by company)
where last2yr_spend >50

别名您的子查询,如下所示

SELECT COUNT(DISTINCT company)
FROM
(
    SELECT company,
           SUM(net_value_gbp) AS last2yr_spend
    FROM Orders o
    WHERE bill_date >= '01-Jan-2016'
    GROUP BY company
) A
WHERE A.last2yr_spend > 50;

像下面这样做:

select count(distinct company) 
from 
( select company, sum(net_value_gbp) as last2yr_spend 
from Orders 
where bill_date >= '01-Jan-2016' 
group by company ) 
AS T1
where T1.last2yr_spend > 50

您必须对 sql server 中的子查询使用ALIAS

别名是一个问题。 但是,您应该像这样编写查询:

select count(*) 
from (select company, sum(net_value_gbp) as last2yr_spend 
      from Orders  o
      where bill_date >= '2016-01-01'
      group by company
     ) c
where last2yr_spend > 50;

笔记:

  • 请注意子查询的别名(您的直接问题)。
  • 不需要COUNT(DISTINCT) 子查询为每个公司返回一行。 COUNT(DISTINCT)会产生额外的开销,因此简单的COUNT(*)就足够了。
  • 日期格式使用 ISO 标准 YYYY-MM-DD。 对于大多数国际化设置,SQL Server 理解这种格式(为了 100% 的完整性,您可以删除连字符,但我喜欢它们以提高可读性)。
  • 如果company曾经为NULL *并且您不想计算它,则您只需要COUNT(company) (而不是COUNT(*) )。
select count(company) 
from 
(
select company, sum(net_value_gbp) as last2yr_spend 
from Orders 
where bill_date >='01-Jan-2016' 
group by company
having sum(net_value_gbp) > 50) as T1

子查询的替代方法是 CTE,我发现它的可读性稍高一些。 类似于以下内容:

    ;with orders_by_comp as (
          select company, sum(net_value_gbp) as last2yr_spend 
          from Orders  o
          where bill_date >= '2016-01-01'
          group by company)
    select count(distinct company) 
    from orders_by_comp 
    where last2yr_spend > 50;

你可以使用的总和过滤having这样的:

with cte
AS
(
    select company
    from Orders 
    where bill_date >='01-Jan-2016' 
    group by company
    having sum(net_value_gbp) > 50
) 
select count(distinct company)
from cte;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM