2015-03-31 49 views
0

SQL Server的新功能,我想用我的数据库中的数据库中的最高顺序获得公司的最高层1的公司内我的代码已经工作,但我不知道如何使用它正确。我认为只有缺少的语法。SQL TOP 1嵌套查询的语法

查询#1是工作的罚款:

SELECT 
    c.CompanyName, COUNT(DISTINCT OrderID) as Nombre_Commande 
FROM 
    Orders O 
INNER JOIN 
    Customers C ON O.CustomerID = c.CustomerID 
GROUP BY 
    c.CompanyName 

我所试图做的

SELECT TOP (1) * 
FROM 
    (SELECT 
     c.CompanyName, COUNT(DISTINCT OrderID) AS Nombre_Commande 
    FROM 
     Orders O 
    INNER JOIN 
     Customers C ON O.CustomerID = c.CustomerID 
    GROUP BY 
     c.CompanyName) 
+0

SELECT TOP(1)* FROM(SELECT c.CompanyName,COUNT(DISTINCT订单ID)作为Nombre_Commande FROM级O INNER JOIN顾客Ç ON O.CustomerID = c.CustomerID GROUP由c.CompanyName)如表名 – 2015-03-31 00:45:27

+0

你也会想用'ORDER BY'来指定你想要排序的内容。如果没有指定,您的行可以以任意顺序返回,并且您可能会得到不同的结果。 – 2015-03-31 00:48:44

回答

4

你需要给派生表的别名,也指定顶部没有通过订单子句是非常没有意义的,因为行作为一个集合返回而没有任何顺序,除非使用order by子句明确指定顺序:

SELECT TOP (1) * 
FROM (
    SELECT c.CompanyName, COUNT(DISTINCT OrderID) as Nombre_Commande 
    FROM Orders O 
    INNER JOIN Customers C ON O.CustomerID=c.CustomerID 
    GROUP by c.CompanyName 
) AS YourTable 
ORDER BY something_meaningful_maybe_nombre_commande? 
2

这个怎么样?

SELECT TOP 1 c.CompanyName, COUNT(DISTINCT OrderID) as Nombre_Commande 
FROM Orders O INNER JOIN 
    Customers C 
    ON O.CustomerID = c.CustomerID 
GROUP by c.CompanyName 
ORDER BY Nombre_Commande DESC; 

这里假定Nombre_Commande是你想要订购的东西。

顺便说一句,如果COUNT(DISTINCT)真的需要这个查询,我会感到惊讶。 COUNT(*)COUNT(OrderId)应该足够。

+0

我不认为你可以通过别名订购? – 2015-03-31 03:22:19

+2

@ Nick.McDermaid。 。 。在大多数SQL方言中,你都可以。我相信它是标准的一部分,但不一定所有的数据库都支持它。特别是对于SQL Server,您可能会对以下内容感兴趣:http://sqlblog.com/blogs/tibor_karaszi/archive/2010/10/03/why-can-t-we-have-column-alias-in-order-by的.aspx。 – 2015-03-31 03:25:47

+0

什么我喜欢这个网站...当我想我知道我学到了一些新东西的时候! – 2015-03-31 04:56:10