[英]SELECT rows for each 2 DISTINCT columns in a Table in SQL Server
我有一个表,有多个网站的数千行日志统计信息(每页的浏览量,每个网站)。 例如,在此表中,多个站点可以具有相同页面名称的单独统计信息:
+----+---------+-------+------------+
| 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,但是我无法绕过它! 当我需要多个不同的值时,如何制定此查询? 谢谢!
更新(动态SQL + PIVOT的答案): PIVOT是正确的方法,包括潜在的答案。 由于实际SELECT语句中的值的SUM是使动态SQL查询正常工作的关键,因此给第二响应者提供了官方信用。
http://sqlfiddle.com/#!6/7b4cb/37/0
另外,从这里使用了一些TSQL:
如果站点列表是静态的,您可以像这样使用数据透视表
SELECT
page,
sum(name1) name1,
sum(name2) name2,
sum(name3) name3
FROM
(SELECT id, page, views, sitename
FROM Table1) p
PIVOT
(
SUM(VIEWS)
FOR SiteName IN (name1, name2, name3)
) as pvt
GROUP BY
page
如果它需要是动态的,你可以使用这种使用动态sql的技术。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.