【发布时间】:2010-04-27 16:46:39
【问题描述】:
这是场景: 我有一个记录 user_id、module_id 和查看模块的日期/时间的表。
例如。
Table: Log
------------------------------
User_ID Module_ID Date
------------------------------
1 red 2001-01-01
1 green 2001-01-02
1 blue 2001-01-03
2 green 2001-01-04
2 blue 2001-01-05
1 red 2001-01-06
1 blue 2001-01-07
3 blue 2001-01-08
3 green 2001-01-09
3 red 2001-01-10
3 green 2001-01-11
4 white 2001-01-12
我需要获得一个以 user_id 作为第一列的结果集,然后是每个模块的列。行数据就是 user_id 和用户查看每个模块的次数。
例如。
---------------------------------
User_ID red green blue white
---------------------------------
1 2 1 2 0
2 0 1 1 0
3 1 2 1 0
4 0 0 0 1
我最初认为我可以用 PIVOT 做到这一点,但没有骰子;该数据库是在 SQL Server 2005 中运行的转换后的 SQL Server 2000 数据库。我无法更改兼容性级别,因此 pivot 已失效。
另一个问题是模块会有所不同,每次添加或删除模块时都重新编写查询是不可行的。这意味着我不能在模块中进行硬编码,因为我事先不知道哪些会被安装,哪些不会被安装。
我怎样才能做到这一点?
【问题讨论】:
标签: sql sql-server sql-server-2005 pivot