我有一个要从中提取信息的数据库,并且已确定我需要除去没有订单的记录。事实证明,数据库中有没有订单的客户,我们不想选择这些订单。
我的原始查询是这样:
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。
如何修改此查询以获取所选客户已完成的订单数量的计数?
答案 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)
,因为我不知道您想要的行顺序是什么,所以您需要更改它。