各位大侠:
  现有两个表,表中的数据如下:Table_1: Employee
emp_name        emp_type        emp_memo
张三            Designer         设计员
李四            Designer         设计员
QC_1        QC             质检员
QC_2              QC             质检员
Table_2: Production
emp_name        emp_production        QC_name
张三           100                QC_2
张三           100                QC_1
李四           100                QC_2
张三           100                QC_2
李四           100                QC_2
现要求:不但要对张三和李四二人的产量(emp_production)进行分类汇总,而且同时也要对两个质检员
QC_1和QC_2的检查产量进行分类汇总,将两个汇总的结果融合在同一个表中,结果如下,请教大家这个要
求能否用一条SQL语句写完成它,该如何写?先谢谢了!emp_name        emp_production
张三           300
李四           200
QC_1           100
QC_2           400

解决方案 »

  1.   


    select a.emp_name,sum(b.emp_production) emp_production 
    from Employee a join Production b on a.emp_name = b.emp_name
    group by a.emp_name
    union all
    select a.emp_name,sum(b.emp_production) emp_production 
    from Employee a join Production b on a.emp_name = b.QC_name
    group by a.emp_name
      

  2.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(小F,向高手学习)
    -- Date    :2011-09-21 14:50:32
    -- Verstion:
    --      Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (Intel X86) 
    -- Apr 22 2011 11:57:00 
    -- Copyright (c) Microsoft Corporation
    -- Enterprise Evaluation Edition on Windows NT 6.1 <X64> (Build 7600: ) (WOW64)
    --
    ----------------------------------------------------------------
    --> 测试数据:[Employee]
    if object_id('[Employee]') is not null drop table [Employee]
    go 
    create table [Employee]([emp_name] varchar(4),[emp_type] varchar(8),[emp_memo] varchar(6))
    insert [Employee]
    select '张三','Designer','设计员' union all
    select '李四','Designer','设计员' union all
    select 'QC_1','QC','质检员' union all
    select 'QC_2','QC','质检员'
    --> 测试数据:[Production]
    if object_id('[Production]') is not null drop table [Production]
    go 
    create table [Production]([emp_name] varchar(4),[emp_production] int,[QC_name] varchar(4))
    insert [Production]
    select '张三',100,'QC_2' union all
    select '张三',100,'QC_1' union all
    select '李四',100,'QC_2' union all
    select '张三',100,'QC_2' union all
    select '李四',100,'QC_2'
    --------------开始查询--------------------------
    select
       a.emp_name,SUM(emp_production) as emp_production
    from
       Employee a join Production b
    on
       a.emp_name=b.emp_name
    or
       a.emp_name=b.QC_name
    group by
       a.emp_name
    ----------------结果----------------------------
    /* emp_name emp_production
    -------- --------------
    QC_1     100
    QC_2     400
    李四       200
    张三       300(4 行受影响)*/
      

  3.   

    select a.emp_name,sum(b.emp_production) from employee a inner join production b on a.emp_name=b.emp_name group by a.emp_name
    union all
    select a.emp_name,sum(b.emp_production) from employee a inner join production b on a.emp_name=b.QC_name group by a.emp_name
      

  4.   

    SELECT 
    a.[emp_name],SUM([emp_production]) AS [emp_production]
    FROM Employee AS a
    INNER JOIN Production AS b ON a.emp_name IN(b.emp_name,b.[QC_name])
    GROUP BY a.[emp_name]
      

  5.   

    select a.emp_name,isnull(sum(b.emp_production),0) emp_production 
    from Employee a join Production b on a.emp_name = b.emp_name
    group by a.emp_name
    union all
    select a.emp_name,isnull(sum(b.emp_production),0) emp_production 
    from Employee a join Production b on a.emp_name = b.QC_name
    group by a.emp_name
      

  6.   


    --感觉用不上表1,直接查表2就可以得出来了
    --Table_1: 
    create table Employee(emp_name varchar(20), emp_type varchar(20), emp_memo varchar(20))
    go
    insert into employee(
    emp_name, emp_type, emp_memo)
    select '张三', 'Designer', '设计员' union all
    select '李四', 'Designer' ,'设计员' union all
    select 'QC_1','QC','质检员'      union all
    select 'QC_2','QC','质检员'--Table_2: 
    create table Production(emp_name varchar(20), emp_production int,QC_name varchar(20))
    go
    insert into production(
    emp_name ,emp_production ,QC_name)
    select '张三',100, 'QC_2' union all
    select '张三',100, 'QC_1' union all
    select '李四',100, 'QC_2' union all
    select '张三',100, 'QC_2' union all
    select '李四',100, 'QC_2'--查询
    select emp_name,sum(emp_production) emp_procution_count
    from production
    group by emp_name
    union 
    select QC_name,sum(emp_production) emp_procution_count
    from production
    group by QC_name--结果
    emp_name  emp_procution_count
    QC_1 100
    QC_2 400
    李四 200
    张三 300
      

  7.   

    select emp_name,sum(emp_production) emp_procution_count
    from production
    group by emp_name
    union 
    select QC_name,sum(emp_production) emp_procution_count
    from production
    group by QC_name
      

  8.   

    多谢 fredrickhu 大侠,采用了您的方法最简单直接!再次多谢各位热心帮助!送分结帖!