よくある問題だと思いますが、何と呼ばれる工程か分からないので、例を挙げて説明します。コンセプトは、まばらなデータセットを完全なシリーズ (曜日、月、順序付きセット (ランキングなど) など) に結合したいというものです。スパース データの空の位置は、完全なシリーズの横に NULL として表示されます。
SQL Server で次のクエリを実行して、毎月の売り上げを調べたとします。
SELECT
YEAR([timestamp]),
MONTH([timestamp]),
COUNT(*)
FROM table1
WHERE YEAR([timestamp]) = YEAR(GETDATE())
GROUP BY
YEAR([timestamp]),
MONTH([timestamp])
ORDER BY
YEAR([timestamp]) DESC,
MONTH([timestamp]) DESC;
ただし、たとえば、売上が今年の 5 月と 8 月にのみ発生した場合、返される結果は次のようになります。
2010 August 1234
2010 May 5678
返される結果セットを次のようにします。
2010 January
2010 February
2010 March
2010 April
2010 May 1234
2010 June
2010 July
2010 August 5678
2010 September
2010 October
2010 November
2010 December
これを行う唯一の方法は次のとおりです。
SELECT
YEAR(GETDATE()),
month_index.month_name,
sales_data.sales
FROM (
SELECT 'January' as month_name, 1 as month_number
UNION
SELECT 'February', 2
UNION
SELECT 'March', 3
UNION
SELECT 'April', 4
UNION
SELECT 'May', 5
UNION
SELECT 'June', 6
UNION
SELECT 'July', 7
UNION
SELECT 'August', 8
UNION
SELECT 'September', 9
UNION
SELECT 'October', 10
UNION
SELECT 'November', 11
UNION
SELECT 'December', 12
) as month_index
LEFT JOIN (
SELECT
YEAR([timestamp]) AS year_name,
MONTH([timestamp]) AS month_name,
COUNT(*) AS sales
FROM table1
WHERE YEAR([timestamp]) = GETDATE()
GROUP BY
YEAR([timestamp]),
MONTH([timestamp])
) AS sales_data
ON month_index.month_name = sales_data.month_name
ORDER BY
month_index.month_number DESC;
データを結合する完全な日付と英数字のシリーズを作成するより良い方法はありますか? そして、これは何と呼ばれていますか?
ありがとう!