当前位置:  数据库>sqlserver

mssql 数据库表行转列,列转行终极方案

    来源: 互联网  发布时间:2014-09-05

    本文导语:  代码如下: --行转列问题 --建立測試環境 Create Table TEST (DATES Varchar(6), EMPNO Varchar(5), STYPE Varchar(1), AMOUNT Int) --插入數據 Insert TEST Select '200605', '02436', 'A', 5 Union All Select '200605', '02436', 'B', 3 Union All Select '200605', '02436', 'C', 3 Union All Sel...

代码如下:

--行转列问题
--建立測試環境
Create Table TEST
(DATES Varchar(6),
EMPNO Varchar(5),
STYPE Varchar(1),
AMOUNT Int)
--插入數據
Insert TEST Select '200605', '02436', 'A', 5
Union All Select '200605', '02436', 'B', 3
Union All Select '200605', '02436', 'C', 3
Union All Select '200605', '02436', 'D', 2
Union All Select '200605', '02436', 'E', 9
Union All Select '200605', '02436', 'F', 7
Union All Select '200605', '02436', 'G', 6
Union All Select '200605', '02438', 'A', 7
Union All Select '200605', '02438', 'B', 8
Union All Select '200605', '02438', 'C', 0
Union All Select '200605', '02438', 'D', 3
Union All Select '200605', '02438', 'E', 4
Union All Select '200605', '02438', 'F', 5
Union All Select '200605', '02438', 'G', 1
GO
--測試
--如果STYPE固定,可以這麼寫
Select
DATES,
EMPNO,
SUM(Case STYPE When 'A' Then AMOUNT Else 0 End) As A,
SUM(Case STYPE When 'B' Then AMOUNT Else 0 End) As B,
SUM(Case STYPE When 'C' Then AMOUNT Else 0 End) As C,
SUM(Case STYPE When 'D' Then AMOUNT Else 0 End) As D,
SUM(Case STYPE When 'E' Then AMOUNT Else 0 End) As E,
SUM(Case STYPE When 'F' Then AMOUNT Else 0 End) As F,
SUM(Case STYPE When 'G' Then AMOUNT Else 0 End) As G
From TEST
Group By DATES,EMPNO
Order By DATES,EMPNO

--如果STYPE不固定,用動態語句
Declare @S Varchar(1000)
Set @S=''
Select @S=@S+',SUM(Case STYPE When '''+STYPE+''' Then AMOUNT Else 0 End) As '+STYPE From (Select Distinct STYPE From TEST) A Order By STYPE
Set @S='Select DATES,EMPNO'+@S+' From TEST Group By DATES,EMPNO Order By DATES,EMPNO'
EXEC(@S)
GO
--如果被转置的是数字类型的话,应用下列语句
DECLARE @S VARCHAR(1000)
SET @S='SELECT DATES,EMPNO '
SELECT @S=@S+',['+STYPE+']=SUM(CASE WHEN STYPE='''+STYPE+''' THEN AMOUNT ELSE 0 END)'
FROM (Select Distinct STYPE From TEST) A Order By STYPE
SET @S=@S+' FROM TEST GROUP BY DATES,EMPNO'
EXEC(@S)

如果是列转行的话直接Union All就可以了

例如 :

city style color 46 48 50 52
长沙 S6MF01002 152 1 2 2 1
长沙 S6MF01002 201 1 2 2 1
上面到下面的样子
city style color size qty
长沙 S6MF01002 152 46 1
长沙 S6MF01002 152 48 2
长沙 S6MF01002 152 50 2
长沙 S6MF01002 152 52 1
长沙 S6MF01002 201 46 1
长沙 S6MF01002 201 48 2
长沙 S6MF01002 201 50 2
长沙 S6MF01002 201 52 1

Select City,Style,Color,[46] From Test
Union all
Select City,Style,Color,[48] From Test
Union all
Select City,Style,Color,[50] From Test
Union all
Select City,Style,Color,[52] From Test

就可以了

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • MSSQL附加数据库拒绝访问提示5120错误的处理方法
  • Tomcat已设置成功,但不会连接数据库mssql. 求教。
  • 请问,如果连接一个Mssql的数据库。并操作里面的数据。谢谢了:)
  • mssql2000 有多个数据库,用jdbc连接时候,怎样指定我想用的那个?
  • MSSQL 清空数据库的方法
  • 在java中怎么连接MSSQL这样的数据库?database的属性里用什么驱动?
  • MSSQL数据库获取TEXT字段的内容长度
  • mssql无数据库日志文件恢复数据库的方法第1/2页
  • 解决MSSQL2005远程连接sql2000非默认端口数据库的问题
  • mssql server .ldf和.mdf的文件附加数据库的sql语句
  • MSSQL 删除数据库里某个用户所有表里的数据
  • MSSQL数据库的定期自动备份计划。
  • thinkphp3查询mssql数据库乱码解决方法分享
  • MSSQL数据库占用内存过大造成服务器死机问题的解决方法
  • Godaddy 导入导出MSSQL数据库的实现步骤
  • 自动备份mssql server数据库并压缩的批处理脚本
  • mssql修改数据库名称方法举例
  • MSsql每天自动备份数据库并每天自动清除log的脚本
  • 除MSSQL数据库text字段中恶意脚本的删方法
  • MSSQL中删除用户时数据库主体在该数据库存中拥有架构 无法删除的解决方法
  • 不同版本MSSQL清除日志方法介绍
  • 如何在LINUX下安装MSSQL 是否可以在LINUX下安装MSSQL
  • Myeclipse中自带Tomcat的JDBC连接池配置(mysql和mssql)
  • mysql与mssql的md5加密语句
  • flyingcrean,来讲一下在LINUX中访问MSSQL。
  • 基于mssql导mysql遇到的问题
  • 请问哪里有for mssql的jdbc驱动程序下载?
  • mssql @@ERROR 使用
  • MSSQL 将截断字符串或二进制数据问题的解决方法
  • freetds连接MSSQL2000,应用程序读出来的数据中文部分全是问号!!
  • 可以用JAVA直接访问MSSQL2000的Analysis Services吗?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3