SQL Server中Pivot()函数实现动态行转列
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了SQL Server中Pivot()函数实现动态行转列,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2139字,纯文字阅读大概需要4分钟。
内容图文
一般情况下Pivot()函数中in中只能写死,因为PIVOT()的in中不支持子查询,所以这样的话只能用存储过程来解决;
CREATE PROCEDURE InsurancePivot
@Foldercode VARCHAR(50),
@isY VARCHAR(4)
AS
BEGIN DECLARE @ColumnNames VARCHAR(3000)
SET @ColumnNames=‘‘
SELECT @ColumnNames = @ColumnNames + ‘[‘ + TESTNO + ‘],‘
FROM ( SELECT TESTNO FROM ORDTASK
LEFT JOIN TESTS ON TESTS.TESTCODE = ORDTASK.TESTCODE
WHERE ORDTASK.FOLDERNO IN (SELECT FOLDERNO FROM FOLDERS WHERE FOLDERCODE = @Foldercode) ) t
SET @ColumnNames= LEFT(@ColumnNames, LEN(@ColumnNames)-1)
DECLARE @selectSQL NVARCHAR(3000)
SET @selectSQL= ‘SELECT P.* FROM ( select foldercode as "受理单编号",ordcode as "样品编号",orders.ORIGINALNO as "原始编号", orders.name as "姓名", pa.SEX as "性别", pa.AGE as "年龄", pa.ADDRESS as "现住址", folders.DATERECV as "收样日期",FINAL,name.TESTCODE, orders.SAMPLINGDATE, TESTNO
from orders left join folders on orders.folderno = folders.folderno
left join PATIENTS pa on pa.PID = orders.PID
left join (select ordno, results.FINAL,tests.testno ,tests.testcode
from analytes
left join ORDTASK on ordtask.TESTCODE = analytes.TESTCODE and ordtask.METHOD = analytes.METHOD
left join results on results.ANALYTE = analytes.ANALYTE and results.ORDTASKNO = ordtask.ORDTASKNO
left join tests on tests.testcode = analytes.TESTCODE
where analytes.displayflag = ‘‘‘+@isY+‘‘‘) name on name.ordno = orders.ordno where foldercode = ‘‘‘+@Foldercode+‘‘‘ ) a
pivot( max(FINAL) for TESTNO in ({0}))p‘
SET @selectSQL= REPLACE(@selectSQL,‘{0}‘,@ColumnNames)
EXEC sp_executesql @selectSQL
END
GO
SQL Server中Pivot()函数实现动态行转列
标签:var stc 日期 final code folders sam original end
本文系统来源:http://www.cnblogs.com/zy20160117/p/7428507.html
内容总结
以上是互联网集市为您收集整理的SQL Server中Pivot()函数实现动态行转列全部内容,希望文章能够帮你解决SQL Server中Pivot()函数实现动态行转列所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。