簡體   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