选择ID字段出现在另一个表中的次数

时间:2018-08-17 13:27:05

标签: sql sql-server

我有一个要从中提取信息的数据库,并且已确定我需要除去没有订单的记录。事实证明,数据库中有没有订单的客户,我们不想选择这些订单。

我的原始查询是这样:

USE AspDotNetStoreFrontB2C;
SELECT TOP (100) 
    [c].[CustomerID]
  , [c].[FirstName]
  , [c].[LastName]
  , [c].[Email]
  , [c].[Phone]
  , [a].[Company]
  , [a].[Address1]
  , [a].[Address2]
  , [a].[Suite]
  , [a].[City]
  , [a].State
  , [a].[Zip]
  , [a].[Country]
FROM [Customer] AS [c]
JOIN [Address] AS [a]
     ON [c].[CustomerID] = [a].[CustomerID];

我想做

count(select o.CustomerID from Orders where o.CustomerID=c.CustomerID)

但是,SQL Server Management Studio不喜欢说不能绑定c.CustomerID。

如何修改此查询以获取所选客户已完成的订单数量的计数?

1 个答案:

答案 0 :(得分:3)

如果只希望已下订单的客户,请使用EXISTS

SELECT TOP (100)
       c.CustomerID,
       c.FirstName,
       c.LastName,
       c.Email,
       c.Phone,
       a.Company,
       a.Address1,
       a.Address2,
       a.Suite,
       a.City,
       a.State,
       a.Zip,
       a.Country
FROM Customer c
     JOIN Address a ON c.CustomerID = a.CustomerID
WHERE EXISTS (SELECT 1
              FROM Orders O
              WHERE O.CustomerID = C.CustomerID)
ORDER BY (SELECT NULL); --Whoop whoop, 100 random rows

我确实在问题下对此进行了评论,但是要回答,我添加了ORDER BY。如果您提供的TOP没有ORDER BY,那么您实际上是在对服务器说“返回100个随机行”。我使用过(SELECT NULL),因为我不知道您想要的行顺序是什么,所以您需要更改它。