如何使用SUM获取GROUP BY查询中的总COUNT

时间:2017-07-26 20:15:00

标签: sql

我有一个查询,它从一个表中返回四个字段的SUM:

SELECT 
            MPC.MedioPagoID,
            S.Descripcion,
            MPC.SucursalID,
            CONVERT(VARCHAR(16), fecha,120) fecha,
            Referencia,
            SUM(MontoVenta),
            SUM(MontoDevolucion),
            SUM(MontoComision),
            SUM(MontoAbono),
            mp.Descripcion AS DescripcionMedioPago
        FROM MedioPagoConciliacion MPC WITH (NOLOCK)
            INNER JOIN Sucursal S WITH (NOLOCK) ON S.SucursalID = MPC.SucursalID
            INNER JOIN MedioPago MP WITH (NOLOCK) ON MP.MedioPagoID = 
            MPC.MedioPagoID
        GROUP BY 
            MPC.MedioPagoID,
            S.Descripcion,
            MPC.SucursalID,
            fecha,
            Referencia,
            mp.Descripcion

第一个查询返回238行,现在我需要从具有相同结构的第二个查询中获取相同的值:

SELECT count(*) TOTAL
    FROM MedioPagoConciliacion MPC WITH (NOLOCK)
        INNER JOIN Sucursal S WITH (NOLOCK) ON S.SucursalID = MPC.SucursalID
        INNER JOIN MedioPago MP WITH (NOLOCK) ON MP.MedioPagoID = 
    GROUP BY 
            MPC.MedioPagoID,
            S.Descripcion,
            MPC.SucursalID,
            fecha,
            Referencia,
            mp.Descripcion

第二个查询返回238个具有不同值的结果,我需要从第二个查询中获取单个“238”作为TOTAL,我该如何实现?

3 个答案:

答案 0 :(得分:0)

可能是GROUP BY导致问题,但为什么不利用@@ROWCOUNT

DECLARE @Rows int
SELECT 
        MPC.MedioPagoID,
        S.Descripcion,
        MPC.SucursalID,
        CONVERT(VARCHAR(16), fecha,120) fecha,
        Referencia,
        SUM(MontoVenta),
        SUM(MontoDevolucion),
        SUM(MontoComision),
        SUM(MontoAbono),
        mp.Descripcion AS DescripcionMedioPago
    FROM MedioPagoConciliacion MPC WITH (NOLOCK)
        INNER JOIN Sucursal S WITH (NOLOCK) ON S.SucursalID = MPC.SucursalID
        INNER JOIN MedioPago MP WITH (NOLOCK) ON MP.MedioPagoID = 
        MPC.MedioPagoID
    GROUP BY 
        MPC.MedioPagoID,
        S.Descripcion,
        MPC.SucursalID,
        fecha,
        Referencia,
        mp.Descripcion

SET @Rows = @@ROWCOUNT

SELECT @Rows TOTAL

答案 1 :(得分:0)

假设您使用SQL Server,请尝试以下查询。

SELECT 
    MPC.MedioPagoID,
    S.Descripcion,
    MPC.SucursalID,
    CONVERT(VARCHAR(16), fecha,120) fecha,
    Referencia,
    SUM(MontoVenta),
    SUM(MontoDevolucion),
    SUM(MontoComision),
    SUM(MontoAbono),
    mp.Descripcion AS DescripcionMedioPago,
    COUNT(*) OVER() AS ROW_NUM
FROM MedioPagoConciliacion MPC WITH (NOLOCK)
    INNER JOIN Sucursal S WITH (NOLOCK) ON S.SucursalID = MPC.SucursalID
    INNER JOIN MedioPago MP WITH (NOLOCK) ON MP.MedioPagoID = 
    MPC.MedioPagoID
GROUP BY 
    MPC.MedioPagoID,
    S.Descripcion,
    MPC.SucursalID,
    fecha,
    Referencia,
    mp.Descripcion

答案 2 :(得分:0)

如果不修改您的查询,您可以在outer查询中添加2nd查询以获取总计数。

SELECT COUNT(*)
FROM (
    SELECT count(*) TOTAL
        FROM MedioPagoConciliacion MPC WITH (NOLOCK)
            INNER JOIN Sucursal S WITH (NOLOCK) ON S.SucursalID = MPC.SucursalID
            INNER JOIN MedioPago MP WITH (NOLOCK) ON MP.MedioPagoID = 
        GROUP BY 
                MPC.MedioPagoID,
                S.Descripcion,
                MPC.SucursalID,
                fecha,
                Referencia,
                mp.Descripcion
    )