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

复制代码 代码如下:

--行转列问题
--建立測試環境
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

就可以了

时间: 2024-11-03 16:48:04

mssql 数据库表行转列,列转行终极方案的相关文章

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

复制代码 代码如下: --行转列问题 --建立測試環境 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

数据库表中的一列值为:2007-06-12 列的存储类型为:datatime 但是在Asp.net网面上通过DataList绑定后显示的值为:2007-06-12 0:00:00?????????????????

问题描述 数据库表中的一列值为:2007-06-12列的存储类型为:datatime但是在Asp.net网面上通过DataList绑定后显示的值为:2007-06-120:00:00?怎么样通过DataList控件绑定后让他不显示:0:00:00,而只显示:1985-06-12 解决方案 解决方案二:sql语句不要直接选出时间字段t,拼字符串year(t)+month(t)+day(t)asnewtime解决方案三:'<%#Bind("DateTime","{0:yyy

asp实现获取MSSQL数据库表指定条件行数的函数

 这篇文章主要介绍了asp实现获取MSSQL数据库表指定条件行数的函数的的相关资料,需要的朋友可以参考下       代码如下: '数据库表行数函数,这是取表的行数 Function GetTblRows(TblName) '如果TblName表名值为空,则 if TblName="" Then GetTblRows="未知TblName" exit Function Else set rec = server.createobject("adodb.re

asp实现获取MSSQL数据库表指定条件行数的函数_应用技巧

复制代码 代码如下: '数据库表行数函数,这是取表的行数 Function GetTblRows(TblName)     '如果TblName表名值为空,则     if TblName="" Then        GetTblRows="未知TblName"     exit Function     Else        set rec = server.createobject("adodb.recordset")        SQ

JSP中如何取得MSSQL数据库表中自动增长的ID主键值?

JSP中如何取得MSSQL数据库表中自动增长的ID主键值? 如:建一个表student有属性列userid,username其中userid为INT类型只读自动加1的主键(也就是每插入一条记录都会自动加1),那么如何在JSP中得到当前插入行的userid值(比如:我向表里插入了三条记录,在我插入第三条记录时userid的值应为3,那么如何得到这个3)? 先创建存储过程: CREATE PROCEDURE addrec   (   @OutID int output,   @Name varcha

使用Java Persistence API修改数据库表行

有关如何使用 NetBeans IDE 的更多信息,请参阅 NetBeans 网站上的 支持和文档. 本文将使用以下技术和资源 JavaServer Faces 组件/ Java EE 平台 1.2/Java EE 5* Travel 数据库 不是必需的 阅读本文的前提条件本文是本系列文章(共两篇)的第二部分.您应该已经阅读了 在 Visual Web 应用程序中使用 Java Persistence API 这篇文章,并且创建了其中所描述 的两个项目以及一些不同的类和网页.第一篇文章提供了建立

C#求助: 关于比较数据库表的某一列值大小筛取相应行,逻辑??sql语句??

问题描述 目前在做c#编程,里面有一步需要查询库表显示下图目标查询结果.思路很乱请求大神指点迷津 解决方案 本帖最后由 zelenebest 于 2016-05-26 11:30:46 编辑解决方案二: 解决方案三:SELECT属性名,时间,属性值FROM表名WHERE可信度>0and可信度<100中文部分用表名和参数名替换解决方案四:引用2楼Libby1984的回复: SELECT属性名,时间,属性值FROM表名WHERE可信度>0and可信度<100中文部分用表名和参数名替换

关于比较数据库表的某一列值大小筛取相应行,逻辑??sql语句????

问题描述 初学者一枚,请教各位大大http://bbs.csdn.net/topics/391958258 解决方案

批量修改Excel数据表行高和列宽教程

1.打开Excel表格,选中要更改的行数,然后单击鼠标右键,选择"行高". 2.弹出"行高"对话框,然后输入数值,我输入的是"26",单击"确定"按钮. 3.更改后的行高效果图. 4.用同样的方法去更改列宽,选中一列,鼠标右键,单击"列宽"选项. 5.弹出"列宽"对话框,然后输入数值,单击"确定"后,更改列宽就完成了.