违法时间 数据类型 数量 用户名
2006-10-1 A 100 ld
2006-10-1 B 20 ld
2006-10-1 C 40 ld
2006-10-1 D 10 ld
2006-10-2 A 120 ld
2006-10-2 B 60 ld
2006-10-2 C 70 ld
2006-10-2 D 70 ld
能否转换成如下格式:
违法时间 数据类型A 数据类型B 数据类型C 数据类型D 用户名
2006-10-1 100 20 40 10 ld
2006-10-2 120 60 70 70 ld不用游标,我想直接用sql语句转换
2006-10-1 A 100 ld
2006-10-1 B 20 ld
2006-10-1 C 40 ld
2006-10-1 D 10 ld
2006-10-2 A 120 ld
2006-10-2 B 60 ld
2006-10-2 C 70 ld
2006-10-2 D 70 ld
能否转换成如下格式:
违法时间 数据类型A 数据类型B 数据类型C 数据类型D 用户名
2006-10-1 100 20 40 10 ld
2006-10-2 120 60 70 70 ld不用游标,我想直接用sql语句转换
解决方案 »
- 用visual studio类型化数据集设计器,有什么好书么
- SQL Server 2005 用来写查询sql语句的查询管理器是哪个?
- 请教一个复杂的的价格比较!!
- 请问:关于数据库连接字符串的区别
- ====谁帮忙看一下这个SQL语句怎么写?====
- 调试时遇到的一个诡异的问题 等待高手解决
- sql server 发邮件
- sql语句问题,根据不同条件连接不同的表,用case如何做?
- 如何把远程的数据库的某个表备份到本地数据库的表(表里需加ID列自动标识),每15分钟备份一次,只对新增的记录
- 请问有什么方法或工具能快速删掉asp程序和存储过程的注释吗?
- case when 可以嵌套吗?
- SQL语句:点击数总和达到100000的ID是多少
sum(case when 数据类型='B' then 数据类型 else 0 end) as 数据类型B,
sum(case when 数据类型='C' then 数据类型 else 0 end) as 数据类型C,
sum(case when 数据类型='D' then 数据类型 else 0 end) as 数据类型D,
用户名
from table
group by 违法时间,用户名
insert @t select '2006-10-1' , 'B' , 20 , 'ld'
insert @t select '2006-10-1' , 'C' , 40 , 'ld'
insert @t select '2006-10-1' , 'D' , 120 , 'ld'
insert @t select '2006-10-2' , 'B' ,60 , 'ld'
insert @t select '2006-10-2' , 'C' , 70 , 'ld'
insert @t select '2006-10-2' , 'D' , 70 ,'ld'
select 违法时间,sum(case when 数据类型='A' then 数量 else 0 end) as 数据类型A,sum(case when 数据类型='B' then 数量 else 0 end) as 数据类型D
,sum(case when 数据类型='C' then 数量 else 0 end) as 数据类型C
,sum(case when 数据类型='D' then 数量 else 0 end) as 数据类型B
from @t
group by 违法时间
--------------------------
违法时间 数据类型A 数据类型B 数据类型C 数据类型D 用户名
2006-10-01 00:00:00 100 20 40 120
2006-10-02 00:00:00 0 60 70 70顺便问一句,你是不是在公安局上班啊?
set @sql=''
select @sql=@sql+',sum(case 数据类型 when '''+数据类型+''' then 数量 esle 0 end)'
+ ' as 数据类型'+数据类型 from yourtable group by 数据类型
exec('select 违法时间+@sql+',用户名 from yourtable group by 违法时间,用户名')
insert ta
select '2006-10-1', 'A', 100 , 'ld' union all
select '2006-10-1', 'B', 20 , 'ld' union all
select '2006-10-1', 'C', 40 , 'ld' union all
select '2006-10-1', 'D', 10 , 'ld' union all
select '2006-10-2', 'A', 120 , 'ld' union all
select '2006-10-2', 'B', 60 , 'ld' union all
select '2006-10-2', 'C', 70 , 'ld' union all
select '2006-10-2', 'D', 70 , 'ld'
declare @sql varchar(1000)
set @sql=''
select @sql=@sql+',[数据类型'+type+']=sum( case type when '''+type+''' then num else 0 end)'
from # group by type
--print @sql
set @sql='select time,name '+@sql+' from ta group by time,name'
exec(@sql)
结果:
time name 数据类型A 数据类型B 数据类型C 数据类型D
---------- ---- ----------- ----------- ----------- -----------
2006-10-1 ld 100 20 40 10
2006-10-2 ld 120 60 70 70
insert ta
select '2006-10-1', 'A', 100 , 'ld' union all
select '2006-10-1', 'B', 20 , 'ld' union all
select '2006-10-1', 'C', 40 , 'ld' union all
select '2006-10-1', 'D', 10 , 'ld' union all
select '2006-10-2', 'A', 120 , 'ld' union all
select '2006-10-2', 'B', 60 , 'ld' union all
select '2006-10-2', 'C', 70 , 'ld' union all
select '2006-10-2', 'D', 70 , 'ld'declare @sql varchar(1000)
set @sql=''
select @sql=@sql+',[数据类型'+type+']=sum( case type when '''+type+''' then num else 0 end)'
from ta group by type--上一个语名的#临时表改为ta
--print @sql
set @sql='select time,name '+@sql+' from ta group by time,name'
exec(@sql)
time name 数据类型A 数据类型B 数据类型C 数据类型D
---------- ---- ----------- ----------- ----------- -----------
2006-10-1 ld 100 20 40 10
2006-10-2 ld 120 60 70 70
create table T
(
违法时间 varchar(10),
数据类型 varchar(10),
数量 int ,
用户名 varchar(10)
)insert into T
select '2006-10-1', 'A', 100, 'ld' union all
select '2006-10-1', 'B', 20, 'ld' union all
select '2006-10-1', 'C', 40, 'ld' union all
select '2006-10-1', 'D', 10, 'ld' union all
select '2006-10-2', 'A', 120, 'ld' union all
select '2006-10-2', 'B', 60, 'ld' union all
select '2006-10-2', 'C', 70, 'ld' union all
select '2006-10-2', 'D', 70, 'ld'declare @sql varchar(6000)
set @sql = 'select 违法时间 , '
select @sql =@sql + 'sum(case when 数据类型 ='''+数据类型+''' then 数量 else 0 end )as 数据类型'+数据类型+','
from T group by 数据类型set @sql =@sql + '用户名 from T group by 用户名,违法时间 '
print @sql exec(@sql)违法时间 数据类型A 数据类型B 数据类型C 数据类型D 用户名
---------- ----------- ----------- ----------- ----------- ----------
2006-10-1 100 20 40 10 ld
2006-10-2 120 60 70 70 ld(所影响的行数为 2 行)