实现数据行转列(数据库必须最低兼容90以上)

实现数据行转列(数据库必须最低兼容90以上)

DECLARE @SQLText NVARCHAR(4000)
SET @SQLText = ''

DECLARE @ResultColumn_Char VARCHAR(8000)
SET @ResultColumn_Char = ''

DECLARE @ResultColumn TABLE
(
SerialNo INT IDENTITY ,
ResultColumn VARCHAR(255)
)
INSERT INTO @ResultColumn
( ResultColumn )
SELECT DISTINCT ParameterName
FROM dbo.tb_ChargeBalanceDetail
WHERE OperationID = 'Charge_Clinic'

DECLARE @iCounter INT
DECLARE @iCounter_max INT
SELECT @iCounter = MIN(SerialNo),@iCounter_max = MAX(SerialNo) FROM @ResultColumn
WHILE @iCounter <= @iCounter_max BEGIN
SELECT @ResultColumn_Char = @ResultColumn_Char + CASE WHEN RTRIM(@ResultColumn_Char) <> '' THEN + ',' ELSE '' END + '[' + ResultColumn + ']' FROM @ResultColumn WHERE SerialNo = @iCounter
SET @iCounter = @iCounter + 1
END

 

SET @SQLtext ='
SELECT *
FROM
(SELECT ChargeBillID,ParameterName,ParameterValue
FROM tb_ChargeBalanceDetail WHERE OperationID = ''Charge_Clinic'') p
PIVOT
(
SUM(p.ParameterValue)
FOR ParameterName IN
( ' + @ResultColumn_Char +
') AS pvt
'

SELECT @SQLText

--EXEC (@SQLText)


数据行合并列

SELECT HospitalID,DiagnosisName = STUFF((SELECT ',' + DiagnosisName FROM dbo.tb_EMR_TRD_DiagnosticRecordsInFormation WHERE HospitalID = T1.HospitalID FOR XML PATH('')),1,1,'')
FROM dbo.tb_EMR_TRD_DiagnosticRecordsInFormation AS T1

转载于:https://www.cnblogs.com/tanhu/p/7124650.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值