行转列实例

	-- SQL2005
	/*
	DECLARE @CCODE VARCHAR(10)
	DECLARE @COLUMN VARCHAR(2000)
	SET @COLUMN = ''
	DECLARE CUR CURSOR
	FOR SELECT DISTINCT [CCODE] FROM CODE_TEMPLATE WHERE IGRADE = 1 ORDER BY CCODE
	OPEN CUR
	FETCH NEXT FROM CUR INTO @CCODE
	WHILE @@FETCH_STATUS = 0
	BEGIN
		IF LEN(@COLUMN) > 0 SET @COLUMN = @COLUMN + ','
		SET @COLUMN = @COLUMN + '[' + @CCODE + ']'
		FETCH NEXT FROM CUR INTO @CCODE
	END
	CLOSE CUR
	DEALLOCATE CUR

	EXEC('
	SELECT CSECCODE,CASE WHEN IID = 2 THEN ''合计'' ELSE CSECNAME END CSECNAME,'+@COLUMN+'
	FROM (SELECT A.*,B.CSECNAME FROM #RowSet A LEFT JOIN SECTIONS B ON A.CSECCODE = B.CSECCODE) T
		PIVOT (
		SUM (FMONEY)
		FOR 
		[CCODE] IN ('+@COLUMN+')
	) AS P ORDER BY IID,CSECCODE')
	*/

	-- SQL2000
	
	SELECT DISTINCT [CCODE] INTO #TMPCODE FROM CODE_TEMPLATE WHERE IGRADE = 1
	ORDER BY CCODE

	DECLARE @ASQL VARCHAR(8000) 
	SET @ASQL = 'SELECT A.CSECCODE,CASE WHEN IID = 2 THEN ''合计'' ELSE CSECNAME END CSECNAME ' 
	SELECT @ASQL = @ASQL + ' , SUM(CASE CCODE WHEN ''' + CCODE + ''' THEN FMONEY ELSE NULL END) [' + CCODE + ']' 
	FROM #TMPCODE AS A 
	SET @ASQL = @ASQL + ' FROM #RowSet A LEFT JOIN SECTIONS B ON A.CSECCODE = B.CSECCODE 
	GROUP BY A.CSECCODE,IID,B.CSECNAME ORDER BY IID,A.CSECCODE' 
	--PRINT @ASQL	 
	EXEC(@ASQL)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值