日期:2014-05-18  浏览次数:20755 次

路过请进,求一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 )