Sql server 获取SQL Server中所有计数的总计数

Sql server 获取SQL Server中所有计数的总计数,sql-server,stored-procedures,Sql Server,Stored Procedures,这里我有SQL Server中的存储过程,它从中获取每个实体的摘要计数。但是我想得到它的总数,这样我就可以从我的表中调用它 这是我的存储过程 USE [canteen] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[sp_getTotalByCostCenter] -- Add the parameters for the stored procedure here

这里我有SQL Server中的存储过程,它从中获取每个实体的摘要计数。但是我想得到它的总数,这样我就可以从我的表中调用它

这是我的存储过程

    USE [canteen]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[sp_getTotalByCostCenter] 
    -- Add the parameters for the stored procedure here
    @datefrom datetime, 
    @dateto datetime,
    @entity nvarchar(50),
    @canteen int

AS
IF @entity = 'Aquino'
BEGIN
SELECT 'Aquino' as Plant, d.dept_code, d.dept_name, count(c.id) as Total
    FROM all_chrg c
    LEFT OUTER JOIN emp_mstr e
    ON c.emp_id = e.id
    LEFT OUTER JOIN department d
    ON e.emp_dept = d.id
    LEFT OUTER JOIN entity et
    ON e.emp_entity = et.id
    WHERE et.entity_code IN ('1425')
    AND c.pdate >= @datefrom AND c.pdate <= @dateto
    AND c.plant_tag = @canteen
    GROUP BY d.dept_code,d.dept_name
    ORDER BY d.dept_code
END
ELSE
IF @entity = 'Central Office'
BEGIN
SELECT 'Central Office' as Plant, d.dept_code, d.dept_name, count(c.id) as Total
    FROM all_chrg c
    LEFT OUTER JOIN emp_mstr e
    ON c.emp_id = e.id
    LEFT OUTER JOIN department d
    ON e.emp_dept = d.id
    LEFT OUTER JOIN entity et
    ON e.emp_entity = et.id
    WHERE et.entity_code IN ('1410')
    AND c.pdate >= @datefrom AND c.pdate <= @dateto
    AND c.plant_tag = @canteen
    GROUP BY d.dept_code,d.dept_name
    ORDER BY d.dept_code
END
ELSE
IF @entity = 'Gabriela'
BEGIN
SELECT 'Gabriela' as Plant, d.dept_code, d.dept_name, count(c.id) as Total
    FROM all_chrg c
    LEFT OUTER JOIN emp_mstr e
    ON c.emp_id = e.id
    LEFT OUTER JOIN department d
    ON e.emp_dept = d.id
    LEFT OUTER JOIN entity et
    ON e.emp_entity = et.id
    WHERE et.entity_code IN ('1410','1420','1425','1435','1407')
    AND c.pdate >= @datefrom AND c.pdate <= @dateto
    AND c.plant_tag = @canteen
    GROUP BY d.dept_code,d.dept_name
    ORDER BY d.dept_code
END
ELSE
IF @entity = 'PETC'
BEGIN
SELECT 'PETC' as Plant, d.dept_code, d.dept_name, count(c.id) as Total
    FROM all_chrg c
    LEFT OUTER JOIN emp_mstr e
    ON c.emp_id = e.id
    LEFT OUTER JOIN department d
    ON e.emp_dept = d.id
    LEFT OUTER JOIN entity et
    ON e.emp_entity = et.id
    WHERE et.entity_code IN ('1430')
    AND c.pdate >= @datefrom AND c.pdate <= @dateto
    AND c.plant_tag = @canteen
    GROUP BY d.dept_code,d.dept_name
    ORDER BY d.dept_code
END
ELSE 
IF @entity = 'Lapu-lapu'
BEGIN
SELECT 'Lapu-lapu' as Plant, d.dept_code, d.dept_name, count(c.id) as Total
    FROM all_chrg c
    LEFT OUTER JOIN emp_mstr e
    ON c.emp_id = e.id
    LEFT OUTER JOIN department d
    ON e.emp_dept = d.id
    LEFT OUTER JOIN entity et
    ON e.emp_entity = et.id
    WHERE et.entity_code IN ('1415')
    AND c.pdate >= @datefrom AND c.pdate <= @dateto
    AND c.plant_tag = @canteen
    GROUP BY d.dept_code,d.dept_name
    ORDER BY d.dept_code
END
ELSE
BEGIN
SELECT CASE WHEN et.entity_code = '1410' THEN
            'Gabriela'
            WHEN et.entity_code = '1420' THEN
            'Gabriela'
            WHEN et.entity_code = '1425' THEN
            'Gabriela'
            WHEN et.entity_code = '1435' THEN
            'Gabriela'
            WHEN et.entity_code = '1407' THEN
            'Gabriela'
            WHEN et.entity_code = '1415' THEN
            'Lapu-lapu'
            WHEN et.entity_code = '1430' THEN
            'PETC'
            ELSE
            'Unknown'
            END as Plant,
    d.dept_code, d.dept_name, count(c.id) as Total
    FROM all_chrg c
    LEFT OUTER JOIN emp_mstr e
    ON c.emp_id = e.id
    LEFT OUTER JOIN department d
    ON e.emp_dept = d.id
    LEFT OUTER JOIN entity et
    ON e.emp_entity = et.id
    WHERE c.pdate >= @datefrom AND c.pdate <= @dateto
    AND c.plant_tag = @canteen
    GROUP BY CASE WHEN et.entity_code = '1410' THEN
            'Gabriela'
            WHEN et.entity_code = '1420' THEN
            'Gabriela'
            WHEN et.entity_code = '1425' THEN
            'Gabriela'
            WHEN et.entity_code = '1435' THEN
            'Gabriela'
            WHEN et.entity_code = '1407' THEN
            'Gabriela'
            WHEN et.entity_code = '1415' THEN
            'Lapu-lapu'
            WHEN et.entity_code = '1430' THEN
            'PETC'
            ELSE
            'Unknown'
            END,
            d.dept_code,d.dept_name
    ORDER BY Plant,d.dept_code
END
试试这个

USE [canteen]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[sp_getTotalByCostCenter] 
-- Add the parameters for the stored procedure here
@datefrom datetime, 
@dateto datetime,
@entity nvarchar(50),
@canteen int
AS
IF @entity = 'Aquino'
BEGIN
declare @cnt int
SET @cnt=0
SELECT 'Aquino' as Plant, d.dept_code, d.dept_name, @cnt=@cnt+count(c.id) as Total
FROM all_chrg c
LEFT OUTER JOIN emp_mstr e
ON c.emp_id = e.id
LEFT OUTER JOIN department d
ON e.emp_dept = d.id
LEFT OUTER JOIN entity et
ON e.emp_entity = et.id
WHERE et.entity_code IN ('1425')
AND c.pdate >= @datefrom AND c.pdate <= @dateto
AND c.plant_tag = @canteen
GROUP BY d.dept_code,d.dept_name
ORDER BY d.dept_code
END
ELSE
IF @entity = 'Central Office'
BEGIN
SELECT 'Central Office' as Plant, d.dept_code, d.dept_name,     @cnt=@cnt+count(c.id) as         Total
FROM all_chrg c
LEFT OUTER JOIN emp_mstr e
ON c.emp_id = e.id
LEFT OUTER JOIN department d
ON e.emp_dept = d.id
LEFT OUTER JOIN entity et
ON e.emp_entity = et.id
WHERE et.entity_code IN ('1410')
AND c.pdate >= @datefrom AND c.pdate <= @dateto
AND c.plant_tag = @canteen
GROUP BY d.dept_code,d.dept_name
ORDER BY d.dept_code
END
ELSE
IF @entity = 'Gabriela'
BEGIN
SELECT 'Gabriela' as Plant, d.dept_code, d.dept_name, @cnt=@cnt+count(c.id) as Total
FROM all_chrg c
LEFT OUTER JOIN emp_mstr e
ON c.emp_id = e.id
LEFT OUTER JOIN department d
ON e.emp_dept = d.id
LEFT OUTER JOIN entity et
ON e.emp_entity = et.id
WHERE et.entity_code IN ('1410','1420','1425','1435','1407')
AND c.pdate >= @datefrom AND c.pdate <= @dateto
AND c.plant_tag = @canteen
GROUP BY d.dept_code,d.dept_name
ORDER BY d.dept_code
END
ELSE
IF @entity = 'PETC'
BEGIN
SELECT 'PETC' as Plant, d.dept_code, d.dept_name, @cnt=@cnt+count(c.id) as Total
FROM all_chrg c
LEFT OUTER JOIN emp_mstr e
ON c.emp_id = e.id
LEFT OUTER JOIN department d
ON e.emp_dept = d.id
LEFT OUTER JOIN entity et
ON e.emp_entity = et.id
WHERE et.entity_code IN ('1430')
AND c.pdate >= @datefrom AND c.pdate <= @dateto
AND c.plant_tag = @canteen
GROUP BY d.dept_code,d.dept_name
ORDER BY d.dept_code
END
ELSE 
IF @entity = 'Lapu-lapu'
BEGIN
SELECT 'Lapu-lapu' as Plant, d.dept_code, d.dept_name, @cnt=@cnt+count(c.id) as Total
FROM all_chrg c
LEFT OUTER JOIN emp_mstr e
ON c.emp_id = e.id
LEFT OUTER JOIN department d
ON e.emp_dept = d.id
LEFT OUTER JOIN entity et
ON e.emp_entity = et.id
WHERE et.entity_code IN ('1415')
AND c.pdate >= @datefrom AND c.pdate <= @dateto
AND c.plant_tag = @canteen
GROUP BY d.dept_code,d.dept_name
ORDER BY d.dept_code
END
ELSE
BEGIN
SELECT CASE WHEN et.entity_code = '1410' THEN
        'Gabriela'
        WHEN et.entity_code = '1420' THEN
        'Gabriela'
        WHEN et.entity_code = '1425' THEN
        'Gabriela'
        WHEN et.entity_code = '1435' THEN
        'Gabriela'
        WHEN et.entity_code = '1407' THEN
        'Gabriela'
        WHEN et.entity_code = '1415' THEN
        'Lapu-lapu'
        WHEN et.entity_code = '1430' THEN
        'PETC'
        ELSE
        'Unknown'
        END as Plant,
d.dept_code, d.dept_name, @cnt=cnt+count(c.id) as Total
FROM all_chrg c
LEFT OUTER JOIN emp_mstr e
ON c.emp_id = e.id
LEFT OUTER JOIN department d
ON e.emp_dept = d.id
LEFT OUTER JOIN entity et
ON e.emp_entity = et.id
WHERE c.pdate >= @datefrom AND c.pdate <= @dateto
AND c.plant_tag = @canteen
GROUP BY CASE WHEN et.entity_code = '1410' THEN
        'Gabriela'
        WHEN et.entity_code = '1420' THEN
        'Gabriela'
        WHEN et.entity_code = '1425' THEN
        'Gabriela'
        WHEN et.entity_code = '1435' THEN
        'Gabriela'
        WHEN et.entity_code = '1407' THEN
        'Gabriela'
        WHEN et.entity_code = '1415' THEN
        'Lapu-lapu'
        WHEN et.entity_code = '1430' THEN
        'PETC'
        ELSE
        'Unknown'
        END,
        d.dept_code,d.dept_name
ORDER BY Plant,d.dept_code
END

与其在帖子中转储一个冗长的存储过程,为什么不创建一个非常简单的版本来实现您想要实现的目标呢?去掉所有的复杂性,您可能会得到更好的响应。人们喜欢提供帮助,但可能会因为浏览你发布的内容而被忽略。确实不清楚你遇到的问题是什么,但是,猜测一下,你可以尝试使用来获取你的总数,例如,在每个部分的末尾,通过分组集d.dept_代码、d.dept_名称来添加分组,而不是仅仅通过d.dept_代码分组,d、 部门名称我想说的是,我需要得到所有的总数……我建议你听从@GarethD的建议。使用该函数区分常规行和分组行。为什么不保留一个Total变量,并在进行选择时不断添加到该变量中?它说必须声明标量变量@cnt这是什么意思@Deepak@Anaiah再试一次。我只是解决了这个问题