繁体   English   中英

为SQL Server中的表中的每个2 DISTINCT列选择行

[英]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:

带有动态字段的SQL Server Pivot

如果站点列表是静态的,您可以像这样使用数据透视表

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小提琴

如果它需要是动态的,你可以使用这种使用动态sql的技术。

Bluefeet在这里给出了一个例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM