1

複数の Web サイトの数千行のログ統計 (ページごと、Web サイトごとのビュー数) を含む単一のテーブルがあります。たとえば、次の表では、複数のサイトが同じページ名に対して個別の統計情報を持つことができます。

+----+---------+-------+------------+
| 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 クエリを適切に機能させるための鍵であったため、2 番目のレスポンダーに公式のクレジットを与えました。

http://sqlfiddle.com/#!6/7b4cb/37/0

また、ここからTSQLを使用しました:

動的フィールドを使用した SQL Server ピボット

4

2 に答える 2

2

サイト リストが静的な場合は、次のようにピボットを使用できます

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を使用するこの手法を使用できます。

ブルーフィートはここに例を示します

于 2013-06-18T18:10:50.410 に答える