a表
名字 
张三
李四
王五b表
姓名   错误代码一 错误原因一
张三      1       输入错误
王五      2       变量错误
张三      1       输入错误c表
姓名   错误代码二 错误原因二
张三      1       不会打字
李四      2       密码错误
李四      2       密码错误输出结果:
姓名   输入错误  变量错误  不会打字  密码错误
张三      2          0        1         0
李四      0          0        1         0      
王五      0          1        0         2
这个SQL代码怎么写啊。。求教下。

解决方案 »

  1.   

    create table a (名字 nvarchar(10))
    create table b(名字 nvarchar(10),错误代码二 int,错误原因一 nvarchar(10))
    create table c(名字 nvarchar(10),错误代码二 int ,错误原因二 nvarchar(10))
    insert into a
    select N'张三' union all
    select N'李四' union all
    select N'王五'
    insert into b
    select N'张三', 1, N'输入错误' union all
    select N'王五', 2, N'变量错误' union all
    select N'张三', 1, N'输入错误'
    insert into c
    select N'张三', 1 ,N'不会打字' union all
    select N'李四', 2 ,N'密码错误' union all
    select N'李四', 2 ,N'密码错误'go
    with t 
    as(
    select * from b
    union all
    select * from c)
    select 名字,输入错误=sum(case when 错误原因一='输入错误' then 1 else 0 end),
    变量错误=sum(case when 错误原因一='变量错误' then 1 else 0 end),
    不会打字=sum(case when 错误原因一='不会打字' then 1 else 0 end),
    密码错误=sum(case when 错误原因一='密码错误' then 1 else 0 end)from t group by 名字
      

  2.   

    select 姓名,
       输入错误=sum(case when 错误原因='输入错误' then 1 else 0 end),
    变量错误=sum(case when 错误原因='变量错误' then 1 else 0 end),
    不会打字=sum(case when 错误原因='不会打字' then 1 else 0 end),
    密码错误=sum(case when 错误原因='密码错误' then 1 else 0 end)
    from (
    select 姓名, 错误代码一 错误代码, 错误原因一 错误原因 from b
    union all
    select 姓名, 错误代码二 错误代码, 错误原因二 错误原因 from b

    group by 姓名
      

  3.   

    --
    declare @sql varchar(8000)
    set @sql = 'select 姓名 '
    select @sql = @sql + ' , sum(case 错误原因 when ''' + 错误原因 + ''' then 1 else 0 end) [' + 错误原因 + ']'
    from (select distinct 错误原因一 错误原因 from b union all select distinct 错误原因二  错误原因 from c) as a
    set @sql = @sql + ' from (select 姓名, 错误代码一 错误代码, 错误原因一 错误原因 from b
    union all
    select 姓名, 错误代码二 错误代码, 错误原因二 错误原因 from b) t group by 姓名'
    exec(@sql) 
      

  4.   

    Select a.fname,sum(case code1 when '输入错误' then qty else 0 end) '输入错误',
    sum(case code1 when '变量错误' then qty else 0 end) '变量错误',
    sum(case code1 when '不会打字' then qty else 0 end) '不会打字',
    sum(case code1 when '密码错误' then qty else 0 end) '密码错误'  from #a a left join (Select * from #b
    union all
    Select * from #c) b on a.fname=b.fname
    group by a.fname
      

  5.   


    create table a(姓名 nvarchar(10))
    create table b(姓名 nvarchar(10),错误代码二 int,错误原因一 nvarchar(10))
    create table c(姓名 nvarchar(10),错误代码二 int ,错误原因二 nvarchar(10))
    insert into a
    select N'张三' union all
    select N'李四' union all
    select N'王五'
    insert into b
    select N'张三', 1, N'输入错误' union all
    select N'王五', 2, N'变量错误' union all
    select N'张三', 1, N'输入错误'
    insert into c
    select N'张三', 1 ,N'不会打字' union all
    select N'李四', 2 ,N'密码错误' union all
    select N'李四', 2 ,N'密码错误'
    goselect *
    from (
    select 姓名, 错误原因 = 错误原因一, num = 1 from b
    union all
    select 姓名, 错误原因 = 错误原因二, num = 1 from c
    ) a 
    pivot (count(num) for 错误原因 in ([输入错误],[变量错误],[不会打字],[密码错误])) b
    /*
    姓名         输入错误        变量错误        不会打字        密码错误
    ---------- ----------- ----------- ----------- -----------
    李四         0           0           0           2
    王五         0           1           0           0
    张三         2           0           1           0(3 行受影响)
    */记得结贴哦,分太少了
      

  6.   


    create table x(名字 nvarchar(10))
    create table y(名字 nvarchar(10),错误代码一 int,错误原因一 nvarchar(10))
    create table z(名字 nvarchar(10),错误代码二 int ,错误原因二 nvarchar(10))
    insert into x
    select N'张三' union all
    select N'李四' union all
    select N'王五'
    insert into y
    select N'张三', 1, N'输入错误' union all
    select N'王五', 2, N'变量错误' union all
    select N'张三', 1, N'输入错误'
    insert into z
    select N'张三', 1 ,N'不会打字' union all
    select N'李四', 2 ,N'密码错误' union all
    select N'李四', 2 ,N'密码错误'DROP TABLE x,y,zSELECT * FROM x
    SELECT * FROM y
    SELECT * FROM z
    SELECT 名字, 
    输入错误=SUM(CASE WHEN 错误原因一='输入错误' THEN 1 ELSE 0 END),
    变量错误=SUM(CASE WHEN 错误原因一='变量错误' THEN 1 ELSE 0 END),
    不会打字=SUM(CASE WHEN 错误原因一='不会打字' THEN 1 ELSE 0 END),
    密码错误=SUM(CASE WHEN 错误原因一='密码错误' THEN 1 ELSE 0 END)
    FROM y
    GROUP BY 名字
    UNION ALL
    SELECT 名字, 
    输入错误=SUM(CASE WHEN 错误原因二='输入错误' THEN 1 ELSE 0 END),
    变量错误=SUM(CASE WHEN 错误原因二='变量错误' THEN 1 ELSE 0 END),
    不会打字=SUM(CASE WHEN 错误原因二='不会打字' THEN 1 ELSE 0 END),
    密码错误=SUM(CASE WHEN 错误原因二='密码错误' THEN 1 ELSE 0 END)
    FROM z
    GROUP BY 名字
    --result
    姓名 输入错误 变量错误 不会打字 密码错误
    王五 0 1 0 0
    张三 2 0 0 0
    李四 0 0 0 2
    张三 0 0 1 0