SQL Server:错误在Oracle中运行良好

时间:2015-07-22 08:14:32

标签: sql-server oracle

我正在从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

,错误是

  

无法对包含聚合或子查询的表达式执行聚合函数

2 个答案:

答案 0 :(得分:1)

你不需要计算和分组。试试这个:

SELECT 
    COUNT(DISTINCT dfc.rentalNumber) 
FROM 
    DueFromClient dfc 
WHERE 
    dfc.facilityId=:facilityId 
    AND dfc.isRentalComponent = 1 
此查询的

sqlfiddle

下面提出的所有建议都不是最理想的,并且返回与上面的查询相同的结果,但它们可能满足@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
此查询的

sqlfiddle

没有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

您可以与原始查询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