SQL行转列的问题
来源:互联网 发布:固定收益部 知乎 编辑:程序博客网 时间:2024/06/14 18:39
SQL行转列的问题!
用语句
select a.SN,a.Process_id,b.Data_id,b.MeasureData from cr_test a left join cr_data b on a.test_id = b.test_id order by a.sn,b.data_id,a.process_id
得到记录如下
sn process_id data_id measuredata
12770006 1 1 1.34
12770006 1 2 0.46
12770006 1 3 9.82
14061916 2 1 5.5
14061916 2 2 4.36
12770006 2 1 6.43
12770006 2 2 0.12
12770006 2 3 6.73
14061916 3 1 3.4
14061916 3 2 1.1
但是这不符合客户的要求,他们的要求是
sn process_id field1 field2 field3 field4
12770006 1 1.34 0.46 9.82 Null
14061916 2 5.5 4.36 Null Null
12770006 2 6.43 0.12 6.73 Null
14061916 3 3.4 1.1 Null Null
就是在原来查询记录的基础上,把measuredata按照data_id的顺序横向排列,但是需要注意的是不同的sn可能measuredata的数目不同.如12770006有3个,14061916只有2个,因此在field3,fiels4处置为Null.但最长到field4.
方法一(L字段数目不确定)
CREATE TABLE tb(sn varchar(20),process_id int,data_id int,measuredata numeric(9,2))
INSERT tb SELECT '12770006',1,1,1.34
UNION ALL SELECT '12770006',1,2,046
UNION ALL SELECT '12770006',1,3,9.82
UNION ALL SELECT '14061916',2,1,5.5
UNION ALL SELECT '14061916',2,2,4.36
UNION ALL SELECT '12770006',2,1,6.43
UNION ALL SELECT '12770006',2,2,0.12
UNION ALL SELECT '12770006',2,3,6.37
UNION ALL SELECT '14061916',3,1,3.4
UNION ALL SELECT '14061916',3,2,1.1
--查询处理
DECLARE @s nvarchar(4000)
--交叉报表处理代码头
SET @s='SELECT sn,process_id'
--生成列记录水平显示的处理代码拼接(处理Item列)
SELECT @s=@s
+','+QUOTENAME(data_id)
+N'=SUM(CASE data_id WHEN '+QUOTENAME(data_id,N'''')
+N' THEN measuredata END)'
FROM tb
GROUP BY data_id
--拼接交叉报表处理尾部,并且执行拼接后的动态SQL语句
EXEC(@s+N'
FROM tb
GROUP BY sn,process_id')
方法二(L字段数目不确定)
declare @s varchar(2000)
set @s='select sn,process_id'
select @s=@s+',field'+ltrim(tb.data_id)+'=sum(case when tb.data_id='''+ltrim(tb.data_id)+''' then tb.measuredata else 0 end)'
from tb
group by tb.data_id
set @s=@s+' from tb group by sn,process_id'
exec(@s)
方法三(L字段数目固定)
Select a.SN,a.Process_id,
[field1]=max(case when data_id=1 then measuredata end),
[field2]=max(case when data_id=2 then measuredata end),
[field3]=max(case when data_id=3 then measuredata end),
[field4]=max(case when data_id=4 then measuredata end)
From tb a
Group By a.SN,a.Process_id
order by a.SN,a.Process_id
- SQL行转列的问题
- sql 行转列的问题
- 关于sql行转列的问题
- 求助SQL狂人,行转列的问题
- SQL 安装的问题??
- SQL菜鸟的问题
- SQL 锁的问题
- SQL查询的问题
- SQL 并发的问题
- SQL乱码的问题
- sql语句的问题
- sql的问题
- sql注入的问题
- sql rownum的问题
- sql遇到的问题
- SQL注入的问题
- SQL 遇到的问题
- sql优化的问题
- Axis2 WebService
- 在VB应用程序中使用INI文件
- eXpresso: 在线Excel电子表格
- 一种可以穿透还原卡和还原软件的代码
- 还原卡破解
- SQL行转列的问题
- 雨林木风 Ghost XP SP2 精简版 Y2.0
- 雨林木风 Ghost XP SP2 纯净版 Y3.0
- 雨林木风 Ghost WinXP 2008 贺岁版
- 雨林木风 WinXP SP2 安装版 Y2.0
- asp制作多关键字搜索,搜索含空格的关键字
- Weblogic 9.1.x 配置秘笈
- 阿里巴巴总裁马云经典语录。
- ajax学习笔记二:javascript实现命名空间(ajax封装类的例子)