動的 SQL 内部結合は各派生テーブルを結合し、重みごとに 1 つの派生テーブルを使用します。一部の重みが存在しないため、結果は空の結果セットになります。内部結合を左結合に置き換えると、データは表示されますが、カウントではなく重み値が表示されます。正直なところ、そもそもなぜ結合を行っているのかわかりません。フィドルの下部に表示したピボットの例に似たピボット クエリを生成してみませんか?
したがって、JOIN を LEFT JOIN に置き換えます。
SELECT -- Weight as the alias for join uniqueness
@join_List = @join_List + '
LEFT JOIN
(
SELECT lessonid, weight, count(weight) AS weightcnt
FROM tblResultsChoices
GROUP BY lessonid,weight
) w' + REPLACE(weight,'.','_') + '
ON (w' + REPLACE(weight,'.','_') + '.lessonid = weight_count.lessonid AND w' + REPLACE(weight,'.','_') + '.weight = ' + weight + '' +')'
,@select_List = @select_List +
',isnull(w' + REPLACE(weight,'.','_') + '.weightcnt , 0) as w' + REPLACE(weight,'.','_') + ''
,@pivot_List = COALESCE(@pivot_List + ',', '') + '[' + weight + ']'
FROM Weights
ああ、Sql Fiddle について: 私が言われたことを理解していれば、同じバッチに入れたい場合は、各文をセミコロンで区切ることになっています。ただし、まだ試していません。
更新:もう少し遊んでいます。select w1.weight
読むべき場所を生成していますw1.weightcnt
。上記のコード スニペットでわかるように.weight
、 @select_list の部分をに置き換える.weightcnt
と機能します。まだ 1 つの疑問が残っています。実際の例と同じピボット クエリを作成しないのはなぜですか?