sql查询结果的纵向变横向排列

原创 2007年09月27日 10:20:00

/*
* 针对纵向转横向的模型
*/
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'
*/ 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

[MSSQL]SQL 查询结果的纵向变横向排列

/*create table BookLibary([图书馆] varchar(10), [科目] varchar(10), [数量] int) insert into BookLibary se...

SQL中如何将表的查询结果纵向显示(个人思路总结)

SQL中如何将表的查询结果纵向显示(初学者个人思路总结)下面看例子: OOrders表结构是这样的 现在要查询Customer的不同名字分别有多少个,并且要如下显示: 1、于是我...

sql server 纵向表横向输出的实现

有时候,我们经常需要通过纵向存储的数据,在做报表的时候,横向输出显示出来。最典型的例子:问卷系统中的存储答案的表,存储的数据类似于(存储形式):  c_UserId (用户编号)c_QuestionI...

MySQL如何将select子查询结果横向拼接后插入数据表中

我的要求具体是这样的。我有数据表audit的结构如下:+-----------+------------+------+-----+-------------------+-------+ | Fie...

【JQuery】——横向纵向下拉菜单

在学习jQuery的过程中,遇到项目中最常用到的下拉菜单,本着高效的原则,在此总结一下横向和纵向下拉菜单的实现效果,形成自己的小类库,以便自己在项目过程中能够方便的调用。       HTML部分:...

ASP横向输出和纵向输出PDF

 edition=session("edition") userrole=session("userrole") projectid=request("projectid") pl...

在Oracle中采用纵向和横向结构表

在本文中,我将分析(关系)数据库中组织数据的不同方式,在本文的例子中,我采用Oracle进行阐述,但其他关系数据库面临同样的问题,这些关系数据库组织数据的方式既有优点也有缺点,将给以区分,据此读者可判...

提高系统性能数据库设计的横向分割和纵向分割技术

性能优化

百度地图图片叠加层切片工具:图片在不同级别间定位不一致(横向或纵向漂移)问题的解决

通过选择特定的百度地图左上角坐标,可以解决叠加层图片定位不准或者说漂移问题。     在“经纬度”选项卡下,点击获取,打开获取左上角坐标窗口。在较低的级别下,例如13级,选择(不用点击)一个grid十...

我用asp做的仿百度文库仿豆丁在线文档分享功能,其中横向、纵向显示不人性化?

我用asp做的仿百度文库仿豆丁在线文档分享功能,网站在给客户使用的过程中,发现一个问题,有的PDF文件该横向的纵向显示了,一直没有找到解决方案  请高手指点?  后台使用 FlashPaper2.2...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)