SQL行转列后,如何知道有多少列,列名是什么?
就是有数据
n date num
joy 2011-01 10
use 2011-02 12
ing 2011-03 13
行转列后
n 2011-01 2011-02 2011-03
joy 10 0 0
use 0 12 0
ing 0 0 13
现在是因为数据有个不确定性,有可能出现如下数据
n date num
joy 2011-01 10
use 2011-02 12
ing 2011-04 14
那转列后就应该是这样:
n 2011-01 2011-02 2011-04
joy 10 0 0
use 0 12 0
ing 0 0 14
现在我是想如何能确定有多少列?列名分别是什么? 我程序里需要用到具体的多少列
用的是存储过程进行行转列的
[解决办法]
--> 测试数据:[tb]IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]GO CREATE TABLE [tb]([n] VARCHAR(3),[date] VARCHAR(7),[num] INT)INSERT [tb]SELECT 'joy','2011-01',10 UNION ALLSELECT 'use','2011-02',12 UNION ALLSELECT 'ing','2011-03',13--------------开始查询--------------------------DECLARE @sql VARCHAR(8000)SET @sql = ''SELECT @sql = ISNULL(@sql + ',', '') + QUOTENAME([date]) + '=max(case when [date]=' + QUOTENAME([date], '''') + ' then [num] else 0 end)'FROM [tb]GROUP BY [date]EXEC('select [n]'+@sql+' from [tb] group by [n]') ----------------结果----------------------------/* n 2011-01 2011-02 2011-03---- ----------- ----------- -----------ing 0 0 13joy 10 0 0use 0 12 0(3 行受影响)*/