我有一个表,其中包含多个网站的数千行日志统计信息(每页,每个网站的查看次数)。例如,在此表中,多个站点可以对同一页面名称具有单独的统计信息:
+----+---------+-------+------------+
| id | page | views | sitename |
+----+---------+-------+------------+
| 1 | page1 | 7 | name1 |
+----+---------+-------+------------+
| 2 | page1 | 5 | name2 |
+----+---------+-------+------------+
| 3 | page2 | 3 | name2 |
+----+---------+-------+------------+
| 4 | page1 | 7 | name3 |
+----+---------+-------+------------+
| 5 | page2 | 5 | name3 |
+----+---------+-------+------------+
| 6 | page3 | 3 | name3 |
+----+---------+-------+------------+
我正在尝试制定一个查询,该查询将允许我为每个 DISTINCT 站点名称列出每个 DISTINCT 页面名称 - 并显示每个站点该页面的查看次数:
+-------+----------+-------+---------+
| page | name1 | name2 | name3|
+-------+----------+-------+---------+
| page1 | 7 | 5 | 7 |
+-------+----------+-------+---------+
| page2 | NULL | 3 | 5 |
+-------+----------+-------+---------+
| page3 | NULL | NULL | 3 |
+-------+----------+-------+---------+
如果站点没有该特定页面的统计信息,则视图值应为 NULL。这让我觉得我需要在某个地方做一个 JOIN/UNION,但我不能把它包起来!当我需要多个不同的值时,如何制定此查询?谢谢!
UPDATE (ANSWER WITH DYNAMIC SQL + PIVOT): PIVOT 是正确的方法,这两个潜在的答案都包括在内。由于实际 SELECT 语句中的值的总和是使动态 SQL 查询正常工作的关键,因此将官方归功于第二响应者。
http://sqlfiddle.com/#!6/7b4cb/37/0
此外,从这里使用了一些 TSQL: