代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
MSSQL
】
SQL 查询结果的纵向变横向排列
作者:
Dezai.CN
/ 发布于
2012/2/9
/
499
<div> /*create table BookLibary([图书馆] varchar(10), [科目] varchar(10), [数量] int) insert into BookLibary select 'A', '语文', 5 union all select 'B', '数学', 6 union all select 'C', '英语', 3 union all select 'B', '语文', 4 union all select 'A', '数学', 3 */ declare @exec varchar(8000) set @exec='select [图书馆]' select @exec=@exec+',max(case when [科目] ='''+ [科目] +''' then [数量] else '''' end) as '''+[科目]+'''' from BookLibary group by [科目] set @exec=@exec+'from BookLibary group by [图书馆]' print @exec exec(@exec) select * from BookLibary ------------------------------- drop procedure Model_his_mid; GO create procedure Model_his_mid( /**//* * @vColumns 分组的列 (最后一个字段后面一定不要加,) * @vClause 查询表的条件(没有条件='') * @vOrderby 查询结果排序的字段 ''为默认排序 * @vTop 取出的行数 ''为全部 */ @vColumns nvarchar(1000), @vClause nvarchar(4000), @vOrderby nvarchar(100), @vTop nvarchar(50) ) as declare @sql nvarchar(4000) declare @xColumns nvarchar(4000) declare @vTable nvarchar(50) declare @vColumnName nvarchar(100) declare @vSumColName nvarchar(100) declare @vNum nvarchar(50) declare @vAllNum nvarchar(50) declare @vSumOrCount nvarchar(50) set @xColumns = '' /**//* * 需要赋值的参数 * * @vTable 真正查询的表名 * @vColumnName 纵向转横向的列名 * @vSumColName 取合计值的列名 * @vNum 数值的别名 * @vAllNum 每行合计的列名 (如果不要合计则='') * @vSumOrCount sum或者count * */ set @vTable = 'his_mid_tab' set @vColumnName = 'hsks' set @vSumColName = 'qty' set @vNum = 'num' set @vAllNum = 'allnum' set @vSumOrCount = 'sum' select @xColumns = @xColumns + 'sum(case ' + @vColumnName + ' when '+ char(39) + [a].[column] + char(39)+ ' then ' + @vNum + ' else 0 end) as ''' + [a].[column] + ''', ' /**//* * 需要比例加入此语句 * + '(' + 'cast(round(sum(case ' + @vColumnName + ' when '+ char(39) + [a].[column] + char(39)+ ' then ' + @vNum + ' else 0 end)*100.00' + '/sum(' + @vNum + '),2) as decimal(10,2))) as ' + [a].[column] + '_i, ' */ /**//** * 要动态显示列的sql语句 住院 OUTP_OR_INP = '0' 门诊OUTP_OR_INP = '1' */ from (select distinct DEPT_NAME as [column] from his_mzkm_tab where OUTP_OR_INP = '0') as a set @xColumns = substring(@xColumns, 0, len(@xColumns)) set @sql = 'select ' if(@vTop <> '') set @sql = @sql + 'top ' + @vTop + ' ' set @sql = @sql + @vColumns + ', ' + @xColumns if(@vAllNum <> '') set @sql = @sql + ', sum(' + @vNum + ') as ' + @vAllNum set @sql = @sql + ' from (' + 'select ' + @vColumns + ', ' + @vColumnName + ', ' + @vSumOrCount + '(' + @vSumColName + ') as ' + @vNum + ' from ' + @vTable if(@vClause <> '') set @sql = @sql + ' where ' + @vClause set @sql = @sql + ' group by ' + @vColumns + ', ' + @vColumnName set @sql = @sql + ') as casual_table group by ' + @vColumns + ' ' if(@vOrderby <> '') set @sql = @sql + 'order by ' + @vOrderby print @sql exec sp_executesql @sql with recompile /**//* * sql语句 引号之内的为sql中的几个参数分别为(分组的列,条件,排序,取出行数) * exec Model_his_mid 'kjkm','date = ''8''','kjkm desc','' */ /**//* * sql语句 * exec Model_his_mid 'kjkm','','kjkm desc','15' */ </div>
试试其它关键字
纵向变横向排列
同语言下
.
SQL查询 多列合并成一行用逗号隔开
.
查看存储过程修改时间,最近执行时间
.
设置手动批量删除数据库相关进程
.
获取某个表中特定字段的所有字符串形式
.
SQL 如何去除重复的字符串
.
怎么去掉一个字段中的重复数据
.
String 去除空格 回车 换行 水平制表符
.
SQL查询和替换含有回车,空格,TAB
.
SQL SERVER 查询每日新增用户数量、次留数量
.
判断两个字符串是否存在相同的内容
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
Dezai.CN
贡献的其它代码
(
4037
)
.
多线程Socket服务器模块
.
生成随机密码
.
清除浮动样式
.
弹出窗口居中
.
抓取url的函数
.
使用base HTTP验证
.
div模拟iframe嵌入效果
.
通过header转向的方法
.
Session操作类
.
执行sqlite输入插入操作后获得自动编号的ID
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3