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'
*/ 

相关文章推荐

mysql 将竖列的表格数据拼接成横向的数据,查询结果

项目中有这样一个需求:有一张表存放了基本的人的信息,另一张家庭表,存放着这个人的家庭情况,再加上第三张表的消费记录,这三张表的部分数据需要拼接在一起,然后展示到前端,这里家庭情况,一个人是存在多条记录...

SQL如何将表中的数据从纵向显示转换成横向显示

在网上看到很多人关于这个问题的解答,但笔者都觉得不满意,在此我想给出最简单的答案表名:成绩表 T_Score(sno)学号 (KC)课程 (Score)成绩 04105124 会计 850410512...

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

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

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

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

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

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

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

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

一个文件实现横向纵向拉拽刷新

今天分享一个非常轻量级的拉拽刷新控件,整个控件只有一个文件,不到500行代码,支持横向纵向,侵入非侵入,自定义拉拽行为以及刷新内容,ListView、RecyclerView、ViewPager等等什...

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

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

ASP横向输出和纵向输出PDF

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

DataTable纵向记录转换成横向列显示,动态新增列及填充数据

DataTable dt = Maticsoft.DBUtility.DbHelperOra.Query(QuerySql).Tables[0]; #region 创建新的DataTable ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sql查询结果的纵向变横向排列
举报原因:
原因补充:

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