sql - SQL Server 2000 中的动态交叉表

标签 sql t-sql sql-server-2000 dynamic-sql crosstab

我有一个表格,其中的数据如下所示:

pageno  groupid
100100  mpadilla
100101  Mine
105101  swachman
100100  swachman
105101  Mine
107101  mpadilla

我希望数据在 SQL Server 2000 中看起来像这样(交叉表/数据透视表)(SQL Server 2000 中没有可用的 PIVOT):

pageno  Mine    mpadilla        swachman
100100  --          X           X
100101  X           --          --
105101  X           --          X
107101  --          X           --

这是我基于本教程的静态解决方案 http://msdn.microsoft.com/en-us/library/aa172756.aspx .:

SELECT pageno, 
    [Mine] = MAX(CASE groupid WHEN 'Mine' THEN 'X' ELSE '--' END),
    [mpadilla] = MAX(CASE groupid WHEN 'mpadilla' THEN 'X' ELSE '--' END),
    [swachman] = MAX(CASE groupid WHEN 'swachman' THEN 'X' ELSE '--' END)
FROM #DistinctPages
GROUP BY pageno
ORDER BY pageno

我需要的是 SQL Server 2000 的动态交叉表解决方案。我尝试根据我的情况进行调整,但我就是不明白:Rows to Columns in SQL Server 2000

任何指导都会有帮助!

最佳答案

declare @a varchar(4000)
set @a = ''
select @a = @a + x
from
(select top 100 percent
',[' +groupid + ']=MAX(CASE groupid WHEN ''' +groupid+ '''  THEN ''X'' ELSE ''--'' END)' x
from #DistinctPages Group by groupid order by groupid) t

exec ('SELECT pageno' + @a + ' FROM #DistinctPages GROUP BY pageno ORDER BY pageno')

关于sql - SQL Server 2000 中的动态交叉表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18774387/

相关文章:

sql - 如何计算t-sql中两个日期之间的闰年数?

sql - 必须声明标量变量 SQL Server?

t-sql - 返回每第 n 条记录的行

reporting-services - 如何在SSRS中表示未知数量的列?

SQL:比较列以获取精确匹配的集合

sql - 奇怪的分号请求

sql - 简单的SQL问题

sql - 子字符串sql server

sql-server-2000 - 如何在 SQL Server 中禁用字符串截断错误?

sql-server - 三路全外连接/表合并