sql查询结果的纵向变横向排列
来源:互联网 发布:什么网络大型游戏 编辑:程序博客网 时间:2024/05/16 10:54
/*
* 针对纵向转横向的模型
*/
GO
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'
*/
- sql查询结果的纵向变横向排列
- SQL 查询结果的纵向变横向排列
- SQL 查询结果的纵向变横向排列
- SQL 查询结果的纵向变横向排列
- [MSSQL]SQL 查询结果的纵向变横向排列
- SQL 分组查询,把纵向显示的结果变成横向显示
- Sql分组查询,如何把纵向显示的结果变成横向显示
- Sql分组查询,如何把纵向显示的结果变成横向显示
- oracle 将查询结果纵向横向显示。
- div的横向与纵向排列
- div的横向与纵向排列
- Sql 横向转纵向
- Android的Menu的横向纵向排列问题
- ASP中如何实现先横向再纵向的排列
- 设置QTabWidget标题页纵向文字横向排列的写法
- 如何把纵向显示的结果变成横向显示?
- SQL纵向变成横向,横向变成纵向(经典案例添加自己的想法)
- sql语句纵向转横向
- Java 程序员面试题目(经典)^_^
- The sample of O_ASYNC and aio_read
- HeadFirst采访“工厂方法”和“抽象工厂”
- 一道面试题
- asp.net控件本质
- sql查询结果的纵向变横向排列
- C# 中委托的簡單理解
- 存储过程中的varchar一定要定义长度
- Eclipse实用快捷键大全
- WEB小结
- 改变Web页面上元素外观的最快捷的方法是添加style属性
- asp正则表达式大全
- ROR 里面的分页
- CASE WHEN