有一个如下表:
拉别     工序名称   部门       计划数量    实际数量    
D1       520直落    电子部       500        400        
D1       520直落    电子部       1000       1000       
D2       523直落    生产部       200        100 
D2       523直落    生产部       700        500      
。。现在要用SQL语句做如下统计:
将所有的计划数量和实际数量加总,并对比大小,同时统计出某个部门所有的实际总数量比计划总数量的记录。拉别     工序名称   部门       总(计划数量)   总(实际数量)    甩数
D1       520直落    电子部       1500            1400              -100
D2       523直落    生产部       900             600               -300本人写了SQL,但是有错:
select 拉别,工序名称,部门,SUM(计划数量) as 计划总,SUM(实际数量) as 实际总,SUM(实际数量-计划数量) as 总甩数  from tb where 部门='生产部' and 总甩数<0 group by 拉别,工序名称,部门请指正。

解决方案 »

  1.   


    --> 生成测试数据表: [tb]
    IF OBJECT_ID('[tb]') IS NOT NULL
    DROP TABLE [tb]
    GO
    CREATE TABLE [tb] ([拉别] [nvarchar](10),[工序名称] [nvarchar](10),[部门] [nvarchar](10),[计划数量] [int],[实际数量] [int])
    INSERT INTO [tb]
    SELECT 'D1','520直落','电子部','500','400' UNION ALL
    SELECT 'D1','520直落','电子部','1000','1000' UNION ALL
    SELECT 'D2','523直落','生产部','200','100' UNION ALL
    SELECT 'D2','523直落','生产部','700','500'--SELECT * FROM [tb]-->SQL查询如下:
    SELECT 拉别,工序名称,部门,SUM(计划数量) AS 计划总, SUM(实际数量) AS 实际总, 
    SUM(实际数量-计划数量) AS 总甩数 
    FROM tb
    WHERE 部门 = '生产部'
    GROUP BY 拉别,工序名称,部门
    HAVING SUM(实际数量-计划数量)<0
    /*
    拉别         工序名称       部门         计划总         实际总         总甩数
    ---------- ---------- ---------- ----------- ----------- -----------
    D2         523直落      生产部        900         600         -300(1 行受影响)*/
      

  2.   

    -->这是包含所有部门的语句:
    SELECT 拉别,工序名称,部门,SUM(计划数量) AS 计划总, SUM(实际数量) AS 实际总, 
    SUM(实际数量-计划数量) AS 总甩数 
    FROM tb
    --WHERE 部门 = '生产部'
    GROUP BY 拉别,工序名称,部门
    HAVING SUM(实际数量-计划数量)<0
    /*
    拉别         工序名称       部门         计划总         实际总         总甩数
    ---------- ---------- ---------- ----------- ----------- -----------
    D1         520直落      电子部        1500        1400        -100
    D2         523直落      生产部        900         600         -300(2 行受影响)
    */
      

  3.   

    SELECT 拉别,工序名称,部门,SUM(计划数量) AS 计划总, SUM(实际数量) AS 实际总, 
        SUM(实际数量-计划数量) AS 总甩数 
    FROM tb
    WHERE 部门 = '生产部'
    GROUP BY 拉别,工序名称,部门
    HAVING SUM(实际数量-计划数量)<0