-2

データベースから

ID   Name Department position
================================
1    A    MK          IT
2    B    MK          RD
3    C    MK          EN
4    D    BD          IT
5    E    BD          RD
6    F    BD          EN
7    G    BD          IT
8    H    OB          IT  
9    I    MK          EN

次のように表に表示するコードの書き方

このようなものをテーブルに表示します

position/departmet    MK  BD   OB
===================================
IT                    1    2   1    
RD                    1    1   0   
EN                    2    1   0

私はただ混乱します。

4

1 に答える 1

2

を使って試してみてくださいCASE

SELECT position,
        SUM(CASE WHEN Department = 'MK' THEN 1 ELSE 0 END) MK,
        SUM(CASE WHEN Department = 'BD' THEN 1 ELSE 0 END) BD,
        SUM(CASE WHEN Department = 'OB' THEN 1 ELSE 0 END) OB            
FROM tableName
GROUP BY position

SQLFiddle デモ

またはPrepared Statement、列数が不明な場合に使用します

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(case when Department = ''',
      Department,
      ''' then 1 ELSE 0 end) AS ',
      Department
    )
  ) INTO @sql
FROM tableName;

SET @sql = CONCAT('SELECT position, ', @sql, ' 
                   FROM tableName 
                   GROUP BY position');

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

SQLfiddle デモ

于 2012-10-10T08:20:41.127 に答える