无法绑定SQL多部分不正确的语法,聚合函数,多部分标识符

时间:2013-05-15 13:06:03

标签: sql sql-server tsql

我已经尝试了几个小时来自学,并学习如何列出所有客户以及他们每个人使用我的虚拟测试数据下达的订单。我想返回CustomerID,CustomerName,OrderTypeName和计数“OrderCount”

我尝试了一些在线发现的不同方法和技术,但我一直遇到类似/不同的问题,这些问题都与我无法弄清楚的简单解决方案有关。

这是我当前的查询。

SELECT 
    c.CustomerID, c.CustomerName, t.OrderTypeName
FROM 
    tblCustomer c, tblOrder o, tblOrderType t
INNER JOIN
    (SELECT 
         o.CustomerID, COUNT(o.CustomerID) AS OrderCount
     FROM
         tblOrder o, tblCustomer c
     WHERE 
         o.CustomerID = c.CustomerID)
ORDER BY CustomerName;

这个目前在关键字'ORDER'附近给出了错误语法的错误。

3 个答案:

答案 0 :(得分:1)

您将旧式连接与以逗号分隔的表格列表和正确的ANSI标准INNER JOIN混合使用 - 但您没有提供任何加入条件

我的建议:习惯ANSI标准并一直使用它!

SELECT 
    c.CustomerID, c.CustomerName, t.OrderTypeName
FROM 
    tblCustomer c
INNER JOIN 
    tblOrder o ON ..(what links tblOrder and tblCustomer??) ....
INNER JOIN
    tblOrderType t ON ....(what links OrderType and Order??) ....
INNER JOIN
    (SELECT 
         o.CustomerID, COUNT(o.CustomerID) AS OrderCount
     FROM
         tblOrder o
     INNER JOIN
         tblCustomer c ON .....(missing join condition again).....
     WHERE 
         o.CustomerID = c.CustomerID) x ON .....(again: missing join condition here).....
ORDER BY CustomerName;

答案 1 :(得分:0)

根据ordertype表如何连接到orders表进行假设:

SELECT 
c.CustomerID
,c.CustomerName
,t.OrderTypeName
,COUNT(o.customer_id) as num_orders
FROM tblCustomer c
INNER JOIN tblOrder o on o.customer_id = c.customer_id
INNER JOIN tblOrderType t ON t.order_id = o.order_id
GROUP BY
c.CustomerID
,c.CustomerName
,t.OrderTypeName
ORDER BY 
c.customer_id

答案 2 :(得分:0)

执行JOIN时,您需要指定加入这两个表的字段:

例如:

select t1.a,t2.b from table1 t1 join table2 t2 on t1.id= t2.id

所以我猜你没有看过你说的正确的指南。

要解决您的问题,您需要选择要使用的语法类型。以逗号分隔(非常旧)或提供join condition(推荐)的那个。