2

結果の行がによって多くの行に分割され、それぞれが独自の変数名を持っている調査データのテーブルがあります。

私のテーブルは次のようになります。

data_id  data_content   var_name          var_line
1        1              SERIAL            1
2        2              GND.AGE           1
3        3              GND.NEWS.FREQ     1
4        2              SERIAL            2
5        3              GND.AGE           2
6        3              GND.NEWS.FREQ     2
7        3              SERIAL            3
8        3              GND.AGE           3
9        4              GND.NEWS.FREQ     3

これは、GND.NEWS.FREQのすべての可能な回答の回答の総数を取得するための現在のクエリです。総数のように:

SELECT *, COUNT(*) as total
  FROM `data`
 WHERE `var_name` = 'GND.NEWS.FREQ'
 GROUP BY `data_content`

ここで、たとえばGND.AGEが3の場合にのみ回答を返す機能を追加する必要があります。したがって、基本的に、var_line=1のすべての行を単一の行として扱います。

ピボットテーブルを調べましたが、それを現在のクエリに追加する方法がわかりません。

可能であれば1つのクエリでこれを実行したいのですが、別のクエリでvar_lineIDを取得するようなことをしてもかまいません。

4

1 に答える 1

2

残念ながら、MySQLには、PIVOT基本的に実行しようとしている機能がありません。CASEしたがって、ステートメントで集計関数を使用する必要があります。var_name列に変換したい値の数が不明な場合は、準備済みステートメントを使用できます。

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when var_name = ''',
      var_name,
      ''' then var_line end) AS ',
      replace(var_name, '.', '_')
    )
  ) INTO @sql
FROM data;

SET @sql = CONCAT('SELECT data_content,', @sql, ' 
                  from data
                  group by data_content
                  ');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

デモで SQL Fiddle を参照してください

于 2012-10-10T10:16:45.277 に答える