路过请进,求一SQL语句,在线等
表table1如下:(没有主键,因为实际表中字段较多,不存在两行数据完全相同的,现用dif字段以示区别)
name ta dif
a 1 1
b 2 2
c 3 3
a 1 4
a 2 5
b 3 6
b 2 7
我想通过查询行到的结果:
name ta=1 ta=2 ta=3
a 2 1 0
b 0 2 1
c 0 0 1
也就是想得到这个表中对应name的各个ta值分别为1,2,3的次数.
谢谢
------解决方案--------------------到sql板块一问就出答案了
------解决方案--------------------pl/sql:
select name,sum(CASE ta WHEN 1 THEN ISVALUES ELSE 0 END)as ta=1 ,sum(CASE ta WHEN 2 THEN ISVALUES ELSE 0 END)as ta=2,sum(CASE ta WHEN 3 THEN ISVALUES ELSE 0 END)as ta=3 from table1
------解决方案--------------------利用矩阵转置来实现的方法:
矩阵表
create table t2 (a0 varchar(20), a1 int,a2 int,a3 int )
insert t2 values( 'a ',1,0, 0)
insert t2 values( 'b ',0,1, 0)
insert t2 values( 'c ',0,0, 1)
转置:
select name, a1*ta, a2*ta, a3*ta
from t1 ,t2
where name = a0
结果:
Name col1 col2 col3
a 1 0 0
a 1 0 0
a 2 0 0
b 0 2 0
b 0 3 0
b 0 2 0
c 0 0 3
------解决方案--------------------哦看错题目了,如果按值转置的化需要用另外的矩阵
矩阵:
create table t2 (a0 varchar(20), a1 int,a2 int,a3 int )