博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql server 行转列解决方案
阅读量:6256 次
发布时间:2019-06-22

本文共 1869 字,大约阅读时间需要 6 分钟。

主要应用case语句来解决行转列的问题

行转列问题主要分为两类

1)简单的行转列问题:

示例表:

id  sid           course  result

1   2005001 语文     80.0
2   2005001 数学     90.0
3   2005001 英语     80.0
4   2005002 语文     56.0
5   2005002 数学     69.0
6   2005002 英语     89.0

执行

select sid,语文=isnull(sum(case course when '语文' then result end),0),
   数学=isnull(sum(case course when '数学' then result end),0),
   英语=isnull(sum(case course when '英语' then result end),0)
   from result 
   group by sid
   order by sid

 

得出结果

sid           语文 数学 英语

2005001 80.0  90.0  80.0
2005002 56.0  69.0  89.0

 

2)较为复杂的行转列

表1:course

id name

1 语文
2 数学
3 英语


表2:result

id sid          course  result

1 2005001 语文      80.0
2 2005001 数学      90.0
3 2005001 英语      80.0
4 2005002 语文      56.0
5 2005002 数学      69.0
6 2005002 英语      89.0

 

declare @sql varchar(8000)
set @sql='select sid'
select @sql=@sql+','+course.name+'=isnull(sum(case course when '''+course.name+''' then result end),0)'
 from course order by id 
set @sql=@sql+' from result group by sid order by sid'
print @sql
exec(@sql)

 

得出结果

sid           语文 数学 英语

2005001 80.0  90.0  80.0
2005002 56.0  69.0  89.0

 

=================================================================================================

 

1
2
3
4
5
6
7
8
9
10
11
12
13
create 
table 
t(bf_org_shop_ID 
varchar
(10),
prod_ID 
varchar
(10),
sales_price 
int
,
sales_qty 
int
)
 
 
 
insert 
into 
values 
(
'单位1'
,
'aa'
,12,13)
insert 
into 
values 
(
'单位1'
,
'bb'
,14,15)
insert 
into 
values 
(
'单位2'
,
'aa'
,12,17)
insert 
into 
values 
(
'单位2'
,
'bb'
,14,19)
insert 
into 
values 
(
'单位3'
,
'aa'
,12,21)
insert 
into 
values 
(
'单位3'
,
'bb'
,14,23)

 

执行

1
2
3
4
5
6
7
declare 
@sql 
varchar
(4000)
set 
@sql = 
'select [prod_ID],[sales_price]'
select 
@sql = @sql + 
',sum(isnull(case [bf_org_shop_ID] when '
''
+[bf_org_shop_ID]+
''
' then [sales_qty] end,0)) as 
['
+[bf_org_shop_ID]+
']'
from 
(
select 
distinct 
[bf_org_shop_ID] 
from 
[t]) 
as 
a
select 
@sql = @sql+
' from [t] group by [prod_ID],[sales_price]'
exec
(@sql)

 

 

 

 

转载于:https://www.cnblogs.com/neru/p/3661518.html

你可能感兴趣的文章
无人值守工业控制系统网络安全解决方案
查看>>
c#设计模式之:外观模式(Facade)
查看>>
macvtap与vhost-net技术
查看>>
解决DESCryptoServiceProvider加解密时弱密钥异常
查看>>
Linux远程登录ssh免密码配置方法(仅供参考)
查看>>
validateJarFile jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet
查看>>
html5学习笔记——html保留标签(二)
查看>>
二分图判定--黑白染色
查看>>
ios 处理 touch 事件时偶尔的击穿现象
查看>>
第105天:Ajax 客户端与服务器基本知识
查看>>
LeetCode70——爬楼梯
查看>>
windows phone 中的TextBlock的一些特性(TextWrapping,TextWrapping)
查看>>
引用类型起的锅
查看>>
java String 类特点
查看>>
LeetCode 300. Longest Increasing Subsequence / 354. Russian Doll Envelopes
查看>>
Loj #2192. 「SHOI2014」概率充电器
查看>>
<x:set/>标签
查看>>
制作首页的显示列表。
查看>>
php 构造函数 __construct()
查看>>
打印多层圣诞树
查看>>