2

私はとても近いです!私は調査を行っており、クライアントは回答にさまざまな重みを使用してレポートを表示できるようにしたいと考えています。SQLFiddle は 2008 年以降のみを許可しますが、2005 年には次の結果が得られます。

Lesson wt count -> | w1_5 | w2 | w3 | w5_5 | w6_5 | N
-----------------------------------------------------
q2                 | 1.5  | 2  | 3  | 5.5  | 6.5  | 9

明らかに、それらは重みではなくカウントであるべきです。

さらに、返される唯一のレコードは、NULL が 0 の行です。

一番下に期待される結果の非動的な例を含むSQLFiddleを作成しました。

動的クエリが合計されず、非動的クエリが合計されないという違いが何であるかはわかりません。

以前の作品はこちら ( 1 , 2 , 3 )

---更新---最終的な解決策---

掲載はこちら 興味のある方へ。

4

1 に答える 1

2

動的 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 つの疑問が残っています。実際の例と同じピボット クエリを作成しないのはなぜですか?

于 2012-07-19T22:40:38.523 に答える