SQL交叉表的实现(动态篇)
在前一篇SQL交叉表的实现 http://www.cnblogs.com/bonny.wong/archive/2005/01/22/95911.html 中,我举了一个静态实现SQL交叉表的简单例子,结果遭到几位朋友的批评,不得已,只有厚着脸皮,重新写了一个动态实现交叉表的代码,以答谢各位热心的观众。
示例仍取前一篇中之简单例子以便说明,解决代码如下:
这里需注意,第一句select不可以和第二句select合并,不信你可以试试,原因吗?暂时不说,你自己也可以想想。
在第三个slect语句中我用了left函数去掉一个“,”并在后面又加了一个“,”,原因是使代码可以更清晰。
代码经我测试已无误。
示例仍取前一篇中之简单例子以便说明,解决代码如下:
declare @sqlText nvarchar(2000)
select @sqlText='select FItemID,'
select @sqlText=@sqltext+'(CASE FName WHEN '''+FName+''' THEN FAuxQty ELSE 0 END) AS ''' +FName+
''',' from (select distinct FName from test) as a
select @sqlText=left(@sqlText,Len(@sqlText)-1)+',FStockID,FDeptID from test'
print @sqltext
exec(@sqlText)
go
select @sqlText='select FItemID,'
select @sqlText=@sqltext+'(CASE FName WHEN '''+FName+''' THEN FAuxQty ELSE 0 END) AS ''' +FName+
''',' from (select distinct FName from test) as a
select @sqlText=left(@sqlText,Len(@sqlText)-1)+',FStockID,FDeptID from test'
print @sqltext
exec(@sqlText)
go
这里需注意,第一句select不可以和第二句select合并,不信你可以试试,原因吗?暂时不说,你自己也可以想想。
在第三个slect语句中我用了left函数去掉一个“,”并在后面又加了一个“,”,原因是使代码可以更清晰。
代码经我测试已无误。