0

次のような構造の一連の調査回答を含むテーブルがあります。

Question Category | Question Number | Respondent ID | Answer

これは、データの最も論理的なストレージと思われました。Question CategoryQuestion Number、の組み合わせRespondent IDはユニークです。

Respondent ID問題は、列が行であるレポートを求められたことAnswerです。はフリーテキストであるためAnswer、numeric-expectedPIVOTコマンドは役に立ちません。すべての情報が 1 つのテーブルに表示されるように、各行が特定のQuestion Category/ペアになっていると便利です。Question Number

これは可能ですか?特に予想される 50 件ほどの調査を表示するには、ある程度の動的 SQL が必要になると思います。

4

3 に答える 3

0

このタスクはクライアントコードで実行する必要があると思います。SQL側でこの転置を実行しようとするのはあまり良い考えではありません。このようなSQLは(構築できたとしても)非常に複雑で壊れやすいものになる可能性があります。

まず、明確な回答がいくつあるかを数える必要があります。すべての回答が異なる場合は、1000列幅のレポートを作成したくないでしょう。また、おそらく答えが狭いことを確認したいと思うでしょう-誰かが本当に悪い1KB幅の答えを出した場合はどうなりますか?

次に、標準の転置されていないSQLの結果に基づいて、レポート(HTMLなど)を動的に作成する必要があります。

たとえば、HTMLでは、出力結果に含まれる列の数がわかっている限り、<th>column</th>テーブルヘッダーとデータセルに使用する列をいくつでも作成できます。<td>value</td>

于 2013-01-15T01:17:38.277 に答える
0

レポート サービスまたはエクセル パワー ピボットがレポートの可能性である場合、それらはおそらく、単純な SQL クエリよりも簡単に目的を達成できます。RS では Tablix を使用でき、パワー ピボットではピボット テーブルを使用できます。どちらも、SQL ピボット ステートメントでピボット列を定義する必要がなく、表形式の結果セットから列名を動的に決定できます。

于 2013-01-15T02:42:00.730 に答える
0

私には、問題は列の数にあるようです。回答者が何人いるかわかりません。

1 つのアイデアは、回答者 ID を連結することです。これは、SQL Server で次のように実行できます。

select distinct Answer,
       (select cast(RespondentId as varchar(255))+'; '
        from Responses r2
        where r2.Answer = r.Answer
        for xml path ('')
       ) AllResponders
from Responses r

(これはテストされていないため、構文エラーがある可能性があります。)

于 2013-01-15T02:19:07.767 に答える