Sql 具有条件的同一行上的多个计数
我正在尝试计算表中数据的摘要视图,目前查询工作正常,但效率不是很高,因为我的表最终将持有10000多份合同。我还需要在同一日期对每个数据进行过滤,我意识到我可以在where语句中对每个计数进行过滤,但这不是很有效 另外,如果我可以在字段上操作而不是选择字段,那么最后的计算会容易得多Sql 具有条件的同一行上的多个计数,sql,tsql,Sql,Tsql,我正在尝试计算表中数据的摘要视图,目前查询工作正常,但效率不是很高,因为我的表最终将持有10000多份合同。我还需要在同一日期对每个数据进行过滤,我意识到我可以在where语句中对每个计数进行过滤,但这不是很有效 另外,如果我可以在字段上操作而不是选择字段,那么最后的计算会容易得多 (SELECT COUNT (*) FROM Contracts WHERE contractWon = 1) Won, (SELECT COUNT (*) FROM Contracts WHERE contract
(SELECT COUNT (*) FROM Contracts WHERE contractWon = 1) Won,
(SELECT COUNT (*) FROM Contracts WHERE contractPassedToCS = 1) PassedtoCS,
(SELECT COUNT (*) FROM Contracts WHERE contractPassedToCS = 0) as OutstandingWithSales,
(SELECT COUNT (*) FROM Contracts WHERE contractIssued = 1) as ContractsIssued,
(SELECT COUNT (*) FROM Contracts WHERE contractReturned = 1) as ContractsReturned,
(CONVERT(decimal, (SELECT COUNT (*) FROM Contracts WHERE contractReturned = 1)) / CONVERT(decimal, (SELECT COUNT (*) FROM Contracts WHERE contractIssued = 1))) * 100 as '% Outstanding'
我知道可能需要一些加入,但我有点困惑
谢谢
SELECT
SUM(contractWon) AS Won,
SUM(contractPassedToCS ) AS PassedtoCS,
SUM(1-contractPassedToCS) AS OutstandingWithSales,
SUM(contractIssued) AS contractIssued ,
SUM(contractReturned) AS contractReturned,
100.0 * SUM(contractReturned) / SUM(contractIssued) AS '% Outstanding'
FROM
Mytable
无法聚合的“位”数据类型的替代公式。如果列是int,那么上面的查询就可以工作
--Either CAST first to a type that aggregates...
SUM(CAST(contractWon AS int)) AS Won,
-- .. or rely on COUNT ignores NULL values
COUNT(CASE contractWon WHEN 1 THEN 1 ELSE NULL END) AS Won,
如果你对你(尽管很公平)的假设做出评论,认为这些列是用1/0表示的布尔值(OP没有说明),那么我会加1。抱歉,它们都是布尔值。