我正在从Oracle数据库迁移到SQL Server 2012.某些在Oracle中运行良好的SQL无法与SQL Server一起使用。
以下是我的SQL和错误。
SELECT
SUM(COUNT(DISTINCT dfc.rentalNumber))
FROM
DueFromClient dfc
WHERE
dfc.facilityId=:facilityId
AND dfc.isRentalComponent = 1
GROUP BY
dfc.rentalNumber
,错误是
无法对包含聚合或子查询的表达式执行聚合函数
答案 0 :(得分:1)
你不需要计算和分组。试试这个:
SELECT
COUNT(DISTINCT dfc.rentalNumber)
FROM
DueFromClient dfc
WHERE
dfc.facilityId=:facilityId
AND dfc.isRentalComponent = 1
此查询的
下面提出的所有建议都不是最理想的,并且返回与上面的查询相同的结果,但它们可能满足@Sachi Pj的需要,使用与原始查询相同的结构,使用SUM(COUNT(DISTINCT())两个选项:
SELECT SUM(dfc2.rentalNumber)
FROM
(
SELECT
COUNT(DISTINCT dfc.rentalNumber) rentalNumber
FROM
DueFromClient dfc
WHERE
dfc.facilityId=:facilityId
AND dfc.isRentalComponent = 1
) AS dfc2
GROUP BY dfc2.rentalNumber
此查询的
没有GROUP BY,因为双打被不同的消除:
SELECT SUM(dfc2.rentalNumber)
FROM
(
SELECT
COUNT(DISTINCT dfc.rentalNumber) rentalNumber
FROM
DueFromClient dfc
WHERE
dfc.facilityId=:facilityId
AND dfc.isRentalComponent = 1
) AS dfc2
此查询的
您可以与原始查询sqlfiddle进行比较,以确定结果是一样的。
答案 1 :(得分:1)
从查询中删除SUM
,因为它也没有用,因为您还在使用GROUP BY
。结果将与原始查询相同。
SELECT
COUNT(DISTINCT dfc.rentalNumber)
FROM DueFromClient dfc
WHERE dfc.facilityId = facilityId
AND dfc.isRentalComponent = 1
GROUP BY dfc.rentalNumber
这没有多大意义,因此我建议您将rentalNumber
添加到SELECT
,以便了解您的数据并充分利用GROUP BY
SELECT
COUNT(DISTINCT dfc.rentalNumber)
, dfc.rentalNumber
FROM DueFromClient dfc
WHERE dfc.facilityId = facilityId
AND dfc.isRentalComponent = 1
GROUP BY dfc.rentalNumber