私のテーブルは次のとおりです
ITEM_CREATION_DATE ITEM_ID ITEM_TYPEID ITEM_FOLDER
2008-04-04 00:00:00.000 ITEM01 12 Y
2008-12-14 00:00:00.000 ITEM04 13 Y
2008-09-24 00:00:00.000 ITEM01 13 Y
2009-12-04 00:00:00.000 ITEM01 12 NULL
2009-04-09 00:00:00.000 ITEM02 13 NULL
2010-08-13 00:00:00.000 ITEM01 13 Y
2010-01-28 00:00:00.000 ITEM02 14 Y
2011-04-09 00:00:00.000 ITEM03 13 NULL
2011-10-19 00:00:00.000 ITEM01 12 NULL
2011-04-29 00:00:00.000 ITEM04 13 NULL
2011-02-19 00:00:00.000 ITEM01 13 NULL
2011-04-09 00:00:00.000 ITEM03 13 NULL
2012-02-29 00:00:00.000 ITEM01 14 Y
2012-12-09 00:00:00.000 ITEM03 14 Y
2012-07-19 00:00:00.000 ITEM01 14 Y
2012-06-29 00:00:00.000 ITEM01 12 Y
2012-04-29 00:00:00.000 ITEM03 NULL Y
2012-04-19 00:00:00.000 ITEM03 NULL Y
2013-04-09 00:00:00.000 ITEM01 13 Y
2013-09-14 00:00:00.000 ITEM01 13 Y
2013-05-24 00:00:00.000 ITEM01 12 Y
2013-01-09 00:00:00.000 ITEM01 12 Y
2013-11-09 00:00:00.000 ITEM01 14 Y
2013-09-21 00:00:00.000 ITEM01 12 Y
2013-07-09 00:00:00.000 ITEM02 14 Y
2013-08-09 00:00:00.000 ITEM02 NULL Y
2013-09-09 00:00:00.000 ITEM02 NULL Y
さまざまなアイテム タイプのアイテムの割合を取得する必要があります。ここでの課題は、1 つのクエリで同じことを達成することです。
次のような結果が必要です
Year 12 13 14 NULL
2008 33.33% 66.66% 0.00% 0.00%
2009 0.00% 0.00% 0.00% 0.00%
2010 0.00% 50% 50% 0.00%
2011 0.00% 0.00% 0.00% 0.00%
2012 16.66% 0.00% 50% 33.33%
2013 33.33% 22.22% 22.22% 22.22%
このクエリに取り組む最善の方法は Pivot です。そのため、私はその方向から始めました。私はこれらのタイプのクエリに非常に慣れていないので、専門家の助けが必要です.
さまざまなアイテムタイプのアイテム数を使用してクエリを取得できました
select * from
(
SELECT YEAR(ITEM_CREATION_DATE) AS [Year], ITEM_ID, ITEM_TYPEID FROM [dbo].[ITEM_DETAIL]
WHERE ITEM_FOLDER IS NOT NULL
) AS Result pivot (count(ITEM_ID) for ITEM_TYPEID in ([12],[13],[14])) as MyTbl
アウトプット 年 12 13 14
2008 1 2 0
2010 0 1 1
2012 1 0 3
2013 3 2 2
しかし、ここでの問題は、残りの年 (つまり 2009 年と 2011 年) が where 句 (ITEM_FOLDER IS NOT NULL) に該当しないため、テーブルにすべての年が必要であるため、それらが欠落していることです。
また、クエリで NULL 項目タイプがフェッチされません。
これを解決する正しいアプローチがあるかどうか教えてください。ストアド プロシージャ内の複数の SQL で簡単に実行できます。しかし、それは私の場合、実行可能な解決策ではありません。目的の出力を得るには、単一の SQL クエリを実行する必要があります
PIVOT を使用すると、カウントまたはパーセンテージのみを取得できますが、両方を取得できないようです。 Year が NULL で ITEM_TYPE が NULL の場合、このような同じことを考慮に入れることはできますか 2008 12 1 33.33% 2008 13 2 66.66% 2009 12 1 50.00% 2009 13 1 50.00% 2010 13 1 50.00% 2010 14 1 50.00% 2011 12 1 20.00% 2011 13 4 80.00% 2012 ヌル 2 33.33% 2012 12 1 16.66% 2012 14 3 50.00% 2013 ヌル 2 22.22% 2013 12 3 33.33% 2013 13 2 22.22% 2013 14 2 22.22% 出力が正しくありません。 ITEM_FOLDER が null である年については、すべての項目タイプのカウントが 0 でなければなりません また、1 つの項目タイプのレコードしかない場合は、残りのすべての項目タイプのカウントを 0 として表示する必要があります。 この下のように YEAR ITEM_TYPE COUNT PERCENTAGE 2008 12 1 33.33 2008 13 2 66.67 2008 14 0 0.00 2009 12 0 0.00 2009 13 0 0.00 2009 14 0 0.00 2010 12 0 0.00 2010 13 1 50.00 2010 14 1 50.00 2011 12 0 0.00 2011 13 0 0.00 2011 14 0 0.00 2012 ヌル 2 33.33 2012 12 1 16.67 2012 13 0 0.00 2012 14 3 50.00 2013 ヌル 2 22.22 2013 12 3 33.33 2013 13 2 22.22 2013 14 2 22.22