【发布时间】:2015-03-05 18:09:23
【问题描述】:
我有以下关系:银行 -> 融资 -> 合同 -> 供应商
我必须使用以下查询选择与供应商相关的所有银行:
SELECT DISTINCT A.Name AS BankName, A2.Name as SupplierName
FROM Companies A
INNER JOIN Financing F ON F.IdFinancialCompany = A.Id
INNER JOIN Contracts C ON F.IdContract = C.Id
INNER JOIN Companies A2 ON C.IdSupplier = A2.Id
GROUP BY A.Name, A2.Name
到目前为止,一切都很好。
现在我必须列出有效的合同数量和总合同数量,所以我考虑包含一个子查询:
SELECT DISTINCT A.Name AS BankName, A2.Name as SupplierName,
(SELECT COUNT(C.Id)),
(SELECT COUNT(C.Id) WHERE C.ContractStatus = 1)
FROM Companies A
INNER JOIN Financing F ON F.IdFinancialCompany = A.Id
INNER JOIN Contracts C ON F.IdContract = C.Id
INNER JOIN Companies A2 ON C.IdSupplier = A2.Id
GROUP BY A.Name, A2.Name
第 2 行运行良好,但在第 3 行出现错误:
选择列表中的“Contracts.ContractStatus”列无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
我希望得到以下结果:
银行名称 |供应商名称 |总合同 |有效合同
银行 1 |供应商 1| 5 | 2
我怎样才能做到这一点?我正在使用 SQL Server 2014
提前致谢!
【问题讨论】:
-
SUM(case C.ContractStatus when 1 then 1 end)
标签: sql-server subquery where-clause correlated-subquery