表行列转换

问题描述

表转换前的样式产品ID号CPU内存显示卡1471.8nullnull150nullnullGF4TAI82000163双核1.9512MGF3TAI4000怎么转成下面这样的表。产品ID号147150163CPU1.8null双核1.9内存nullnull512M显示卡nullGF4TAI82000GF3TAI4000代码怎么写。急急急

解决方案

解决方案二:
行列都是不固定的,动态的
解决方案三:
动态的关注
解决方案四:
我也想学
解决方案五:
/*普通行列转换(2007-11-18于海南三亚)假设有张学生成绩表(tb)如下:NameSubjectResult张三语文  74张三数学  83张三物理  93李四语文  74李四数学  84李四物理  94*/-------------------------------------------------------------------------/*想变成姓名语文数学物理-------------------------------------------李四748494张三748393*/createtabletb(Namevarchar(10),Subjectvarchar(10),Resultint)insertintotb(Name,Subject,Result)values('张三','语文',74)insertintotb(Name,Subject,Result)values('张三','数学',83)insertintotb(Name,Subject,Result)values('张三','物理',93)insertintotb(Name,Subject,Result)values('李四','语文',74)insertintotb(Name,Subject,Result)values('李四','数学',84)insertintotb(Name,Subject,Result)values('李四','物理',94)go--静态SQL,指subject只有语文、数学、物理这三门课程。selectname姓名,max(casesubjectwhen'语文'thenresultelse0end)语文,max(casesubjectwhen'数学'thenresultelse0end)数学,max(casesubjectwhen'物理'thenresultelse0end)物理fromtbgroupbyname/*姓名语文数学物理-------------------------------------------李四748494张三748393*/--动态SQL,指subject不止语文、数学、物理这三门课程。declare@sqlvarchar(8000)set@sql='selectNameas'+'姓名'select@sql=@sql+',max(caseSubjectwhen'''+Subject+'''thenResultelse0end)['+Subject+']'from(selectdistinctSubjectfromtb)asaset@sql=@sql+'fromtbgroupbyname'exec(@sql)/*姓名数学物理语文-------------------------------------------李四849474张三839374*/-------------------------------------------------------------------/*加个平均分,总分姓名语文数学物理平均分总分--------------------------------------------------------------------------李四74849484.00252张三74839383.33250*/--静态SQL,指subject只有语文、数学、物理这三门课程。selectname姓名,max(casesubjectwhen'语文'thenresultelse0end)语文,max(casesubjectwhen'数学'thenresultelse0end)数学,max(casesubjectwhen'物理'thenresultelse0end)物理,cast(avg(result*1.0)asdecimal(18,2))平均分,sum(result)总分fromtbgroupbyname/*姓名语文数学物理平均分总分--------------------------------------------------------------------------李四74849484.00252张三74839383.33250*/--动态SQL,指subject不止语文、数学、物理这三门课程。declare@sql1varchar(8000)set@sql1='selectNameas'+'姓名'select@sql1=@sql1+',max(caseSubjectwhen'''+Subject+'''thenResultelse0end)['+Subject+']'from(selectdistinctSubjectfromtb)asaset@sql1=@sql1+',cast(avg(result*1.0)asdecimal(18,2))平均分,sum(result)总分fromtbgroupbyname'exec(@sql1)/*姓名数学物理语文平均分总分--------------------------------------------------------------------------李四84947484.00252张三83937483.33250*/droptabletb------------------------------------------------------------------------------------------------------------------/*如果上述两表互相换一下:即姓名语文数学物理张三74  83  93李四74  84  94想变成NameSubjectResult----------------------------李四语文74李四数学84李四物理94张三语文74张三数学83张三物理93*/createtabletb1(姓名varchar(10),语文int,数学int,物理int)insertintotb1(姓名,语文,数学,物理)values('张三',74,83,93)insertintotb1(姓名,语文,数学,物理)values('李四',74,84,94)select*from(select姓名asName,Subject='语文',Result=语文fromtb1unionallselect姓名asName,Subject='数学',Result=数学fromtb1unionallselect姓名asName,Subject='物理',Result=物理fromtb1)torderbyname,caseSubjectwhen'语文'then1when'数学'then2when'物理'then3when'总分'then4end--------------------------------------------------------------------/*加个平均分,总分NameSubjectResult-------------------------------------李四语文74.00李四数学84.00李四物理94.00李四平均分84.00李四总分252.00张三语文74.00张三数学83.00张三物理93.00张三平均分83.33张三总分250.00*/select*from(select姓名asName,Subject='语文',Result=语文fromtb1unionallselect姓名asName,Subject='数学',Result=数学fromtb1unionallselect姓名asName,Subject='物理',Result=物理fromtb1unionallselect姓名asName,Subject='平均分',Result=cast((语文+数学+物理)*1.0/3asdecimal(18,2))fromtb1unionallselect姓名asName,Subject='总分',Result=语文+数学+物理fromtb1)torderbyname,caseSubjectwhen'语文'then1when'数学'then2when'物理'then3when'平均分'then4when'总分'then5enddroptabletb1

时间: 2024-09-20 17:37:38

表行列转换的相关文章

[数据库] SQL查询语句表行列转换及一行数据转换成两列

本文主要讲述了SQL查询语句表之间的行列转换,同时也包括如何将一行数据转换成两列数据的方法.子查询的应用.decode函数的用法.希望文章对你有所帮助~ 1.创建数据库表及插入数据 2.子查询统计不同性质的学生总数 3.一行数据转换成两列数据 union all 4.表行列数据转换(表转置) 1.创建数据库表及插入数据 创建数据库.创建学生表并设置主键.插入数据代码如下: --创建数据库 create database StudentMS --使用数据库 use StudentMS --创建学生

行列转换

转换 1. 行列转换--普通 假设有张学生成绩表(CJ)如下 [姓名]  [学科]  [成绩]张三    语文    80 张三    数学    90 张三    物理    85 李四    语文    85 李四    数学    92 李四    物理    82王五    数学    60 想变成     [姓名] [语文] [数学] [物理]张三   80     90     85 李四   85     92     82王五   null   60     null decla

Oracle技术:使用分析函数进行行列转换

经常有朋友问到行列转换的问题,留言板上也有这样的提问. 其实使用分析函数进行处理是很好的方式,翻一下Tom的书,将其中的一个例子收录在这里. 比如查询scott.emp表的用户SAL排序信息,可以使用如下查询: SQL> SELECT deptno, ename, 2         ROW_NUMBER () OVER (PARTITION BY deptno ORDER BY sal DESC) seq 3    FROM emp; DEPTNO ENAME             SEQ

Excel表格行列转换教程

  在Excel表格操作过程中,我们常常会需要将Excel表格行列转换,不懂这种方法的朋友们可以来学习一下Excel行列转换教程. Excel技巧 Excel表格行列转换教程 步骤一.选择需要转换为列的行区域 首先打开相应的工作表,选择需要转为列的行单元格区域,如图所示: 步骤二.复制选中的行内容 切换到"开始"选项卡,在"剪贴板"选项组中单击"复制"按钮,复制选中内容. 步骤三.打开"选择性粘贴"对话框 单击要转换区域的起始

【转】SQL行列转换

原文地址:http://blog.csdn.net/kiki113/article/details/4105929   行列转换等经典SQL语句 1.--行列转换 原表:   姓名     科目   成绩            张三     语文    80            张三     数学    90            张三     物理    85            李四     语文    85            李四     物理    82            李

在Sqlserver下巧用行列转换日期的数据统计

原文:在Sqlserver下巧用行列转换日期的数据统计                  在Sqlserver下巧用行列转换日期的数据统计   前言     在SQLSERVER 中有很多统计函数的基础语法,有使用Group By 或 partition by 后配合Sum,Count(*) 等用法.常应用于统计网站的PV流量.合同项目中月收入等业务场景中.在文中我分享下最近做过的统计小案例,和大家互相学习下:)  背景         合同中行项目按月收入的统计   1.业务逻辑及需求   

sql 行列转换

  行列转换实例 表ttt有三个字段 seq   --序列 jcxm --检查项目 zhi   --值 数据分别如下: seq jcxm       zhi -------       --------           -------- 11 1 0.50 11 2 0.21 11 3 0.25 12 1 0.24 12 2 0.30 12 3 0.22                              实现功能 创建视图时移动行值为列值 create view v_view1 as

SQL Server中行列转换 Pivot UnPivot

原文:SQL Server中行列转换 Pivot UnPivot PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (-) )AS P 完整语法: table_source PIVOT( 聚合函数(value_column) FOR pivot_column IN(<column_list>) )   UNPIVOT用于将列明转为列值(即列转行),在SQL Ser

PostgreSQL 行列转换的用法

一般在提交报表的时候,可能会使用到对数据表的行列变换的需求. 如以下数据: digoal=> select * from tbl_sellers_info order by seller,se_year,se_month; seller | se_year | se_month | se_amount ----------+---------+----------+----------- 卡洛斯 | 2011 | 3 | 12 卡洛斯 | 2011 | 4 | 45 卡洛斯 | 2011 | 5