2016-08-11 7 views
0

いくつかのSQLクエリをExcelに移動する方法について質問があります。だから私は現在、この(私はSQLから得たこと)のようなテーブルがあります。SQL/Excel:1時間にSQLエントリのExcelテーブルを作成する

 Date  | Name 
-------------------------- 
2016-08-09 06:05:22 | Jeff 
2016-08-09 06:08:42 | Jeff 
2016-08-09 06:43:16 | Jeff 
2016-08-09 07:05:22 | Jeff 
2016-08-09 07:33:04 | Alex 
2016-08-09 09:33:54 | Alex 
2016-08-09 10:45:02 | Sara 

をそして私は何を探していると、一人一人の名前が表示された回数、時間で区切って、表示されるExcelの表を構築しています。だから6時の列の下では、私はジェフの隣に3、他の人には0にしたいと思っています。 7で私はジェフのための1とアレックスのための1を望むでしょう。そして、9と10で、私はアレックスに1、サラに1がそれぞれ必要です。ここで

は、私はそれがどのように見えるしたいものです。

スーツにダウンコピー
=INT(MOD(A2,1)*24) 

 | 06 | 07 | 08 | 09 | 10 | 11 
---------------------------------- 
Jeff | 3 | 1 | 0 | 0 | 0 | 0 
Alex | 0 | 1 | 0 | 1 | 0 | 0 
Sara | 0 | 0 | 0 | 0 | 1 | 0 
+0

を? – Nicarus

+1

PIVOTが気になります。 – Biscuits

+0

@ Nicarus Microsoft SQLサーバー管理スタジオ – sg4

答えて

2

はSQLにその結果を得るために迅速かつ汚い方法です:

SELECT 
    name, 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 0 THEN 1 END) AS [00], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 1 THEN 1 END) AS [01], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 2 THEN 1 END) AS [02], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 3 THEN 1 END) AS [03], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 4 THEN 1 END) AS [04], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 5 THEN 1 END) AS [05], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 6 THEN 1 END) AS [06], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 7 THEN 1 END) AS [07], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 8 THEN 1 END) AS [08], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 9 THEN 1 END) AS [09], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 10 THEN 1 END) AS [10], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 11 THEN 1 END) AS [11], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 12 THEN 1 END) AS [12], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 13 THEN 1 END) AS [13], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 14 THEN 1 END) AS [14], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 15 THEN 1 END) AS [15], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 16 THEN 1 END) AS [16], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 17 THEN 1 END) AS [17], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 18 THEN 1 END) AS [18], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 19 THEN 1 END) AS [19], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 20 THEN 1 END) AS [20], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 21 THEN 1 END) AS [21], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 22 THEN 1 END) AS [22], 
    COUNT(CASE WHEN DATEPART(HOUR,[Date]) = 23 THEN 1 END) AS [23] 
FROM 
    mytable -- Replace with the name of your table 
GROUP BY 
    name 

これは、個々の(name)はその時間内に記録されている場合の各時間ベースの列を作成します。


ここでは、PIVOT構文を使用している:あなたはどのようなDBMSを使用している

WITH mycte AS (
    -- To make sure that hours with no individuals (`name`), we full join to all possible hours (0-23) 
SELECT 
    hr.hour_number, 
    mt.name, 
    mt.[Date] 
FROM 
    (
    VALUES 
     (0),(1),(2),(3),(4),(5),(6),(7),(8),(9), 
     (10),(11),(12),(13),(14),(15),(16),(17), 
     (18),(19),(20),(21),(22),(23) 
    ) hr (hour_number) 
FULL JOIN 
    mytable mt 
    ON (hr.hour_number = DATEPART(HOUR,mt.datet)) 
GROUP BY 
    hr.hour_number, 
    mt.name, 
    mt.[Date] 
) 

-- This is the actual pivot. Had we not done the work above, hours were the value was 0 for all `name`s would not appear 
SELECT 
    name, 
    [0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12], 
    [13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23] 
FROM 
    mycte 
PIVOT 
    (
    COUNT([Date]) FOR hour_number IN (
     [0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12], 
     [13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23] 
     ) 
    ) p 
WHERE 
    name IS NOT NULL -- This ensure only records associated to a name is returned 
+0

それはかなり素晴らしいです。時間は1時間ごとに計算されていますが、何とか膨らんでいます。 15:00の数字が2の場合は、たとえば151です。しかし、ゼロは正しいです。何か案は?しかしいずれにしても感謝、それは非常に役立ちます! – sg4

+1

心配しないで、私は取り除く必要があるテーブルの反復の束を見つけました。よく働く!ありがとう! – sg4

1

1つのオプションは一緒に時間要素を抽出することです。

これは、日付/時間の時間要素を取り、時間とラウンドに変換します。

そしてピボット:

SO38885347 example

回の完全なセットを確実にするために(例えば8を含む)に、あなたの元データに不足しているものを追加する必要があります。

必要に応じて、空白ではなく0を表示するオプションがあります。

名前の順序はデフォルトでアルファベット順ですが、「手動」で調整することができます。ここで

+0

その表現は別の惑星からのものです。ブックマークしました! :P – Biscuits

+1

ありがとう!私はそれを試して、それはかなりうまくいった、私はピボットテーブルでいくつかの練習が必要になりますこれを働かせる。しかし、応答に感謝! – sg4

関連する問題