a表
名字
张三
李四
王五b表
姓名 错误代码一 错误原因一
张三 1 输入错误
王五 2 变量错误
张三 1 输入错误c表
姓名 错误代码二 错误原因二
张三 1 不会打字
李四 2 密码错误
李四 2 密码错误输出结果:
姓名 输入错误 变量错误 不会打字 密码错误
张三 2 0 1 0
李四 0 0 1 0
王五 0 1 0 2
这个SQL代码怎么写啊。。求教下。
名字
张三
李四
王五b表
姓名 错误代码一 错误原因一
张三 1 输入错误
王五 2 变量错误
张三 1 输入错误c表
姓名 错误代码二 错误原因二
张三 1 不会打字
李四 2 密码错误
李四 2 密码错误输出结果:
姓名 输入错误 变量错误 不会打字 密码错误
张三 2 0 1 0
李四 0 0 1 0
王五 0 1 0 2
这个SQL代码怎么写啊。。求教下。
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 名字
输入错误=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 姓名
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)
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
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 行受影响)
*/记得结贴哦,分太少了
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