【发布时间】:2015-10-27 10:32:05
【问题描述】:
我的查询为您提供在日期“2014-06-01”和“2014-12-31”之间具有销售标题或销售发票的客户。
现在我想创建两个新列,显示在日期“2014-06-01”和“2014-12-31”之间有多少销售发票以及每个客户获得的销售标题。
这里的问题是我真的不明白如何思考,我得到这个错误
Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
这是我的 SQL 查询。
SELECT t1.Name, /*THIS PART GIVES ME THE ERROR*/ (SELECT COUNT(t5.[Bill-to Customer No_]) as he
FROM [dbo].[MNO International AB$Sales Header] t5
WHERE EXISTS
(SELECT * FROM [dbo].[MNO International AB$Customer] t6
WHERE t5.[Bill-to Customer No_]=t6.[No_])
GROUP BY t5.[Bill-to Name]
) as TempSa
FROM [dbo].[MNO International AB$Customer] t1
WHERE (EXISTS
(SELECT *
FROM [dbo].[MNO International AB$Sales Header] t2
WHERE t2.[Bill-to Customer No_] =t1.[No_])
OR EXISTS
(SELECT *
FROM [dbo].[MNO International AB$Sales Invoice Header] t3
WHERE t3.[Posting Date] BETWEEN '2014-06-01' AND '2014-12-31' AND t3.[Bill-to Customer No_] = t1.No_))
这两个查询为我提供了正确数量的每个客户的销售标题和每个客户日期之间的发票。如何将这两个查询合并到上面查询中的select语句中?
SELECT t1.[Bill-to Name], COUNT(t1.[Bill-to Customer No_]) as Temp
FROM [dbo].[MNO International AB$Sales Header] t1
WHERE EXISTS
(SELECT * FROM [dbo].[MNO International AB$Customer] t2
WHERE t1.[Bill-to Customer No_]=t2.[No_] )
GROUP BY t1.[Bill-to Name]
.
SELECT t1.[Bill-to Name], COUNT(t1.[Bill-to Customer No_]) as Temp
FROM [dbo].[MNO International AB$Sales Invoice Header] t1
WHERE EXISTS
(SELECT * FROM [dbo].[MNO International AB$Customer] t2
WHERE t1.[Bill-to Customer No_]=t2.[No_] AND t1.[Posting Date] BETWEEN '2014-06-01' AND '2014-12-31' AND t2.[No_]='101716' )
GROUP BY t1.[Bill-to Name]
【问题讨论】:
-
您的查询使用的是 SQL Server 语法约定,所以我将标签从 mysql 更改为 sql-server。
标签: sql-server count subquery