は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
を? – Nicarus
PIVOTが気になります。 – Biscuits
@ Nicarus Microsoft SQLサーバー管理スタジオ – sg4