0

重複の可能性:
MySQL ピボット行を動的な数の列に

1 日あたりのアイテム数を表示するクエリがあります

$query = "SELECT uploadedby, count(item) as item, date_format(uploaddate, '%m-%d-%y') as date FROM `imsexport` GROUP BY uploadedby,date";
$result = mysql_query($query);

結果のテーブルは次のようになります

   Name        item    date
Abel Antonio    10   01-02-12
Abel Antonio    5    01-03-12
Abel Antonio    6    01-04-12
Abel Antonio    2    01-05-12
Abel Antonio    1    01-09-12
Abel Antonio    15   01-12-12
Abel Antonio    22   01-16-12
Abel Antonio    15   01-17-12
Abel Antonio    7    01-19-12
Abel Antonio    45   02-15-12
Abel Antonio    31   02-16-12
...other names

クエリを次のようにするために、日付を列として作成したいと思います

Name          01-02-12  01-03-12   01-04-12   01-05-12    01-09-12 ....
Abel Antonio    10         5          6          2           1     .....

これを達成する方法を知っている人はいますか?

4

2 に答える 2

0

アプリケーションレベルで表示ロジックを処理します。

于 2013-01-09T07:49:57.820 に答える
0

したがって、動的な列数を使用してピボットを実行したいと思います。使用しているデータベースによって異なりますが、date_formatステートメントからMYSQLであると推測しています。ここにあなたが望むことをする答えへのリンクがあります-楽しんでください!

https://stackoverflow.com/a/12005676/345659

コードは次のようになります。

$query = "
SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT('count(case when date_format(uploaddate, ''%m-%d-%y'') = ''',
      date_format(uploaddate, '%m-%d-%y'),
      ''' then 1 end) AS `',
      date_format(uploaddate, '%m-%d-%y'), '`'
    )
  ) INTO @sql
from imsexport;

SET @sql = CONCAT('SELECT uploadedby AS Name, ', 
                  @sql, 
                  ' FROM imsexport 
                    GROUP BY Name');

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

$result = mysql_query($query);

リンクされた質問でbluefeetによって提供されたフィドルでこのデータを使用しました:

create table imsexport
(
  uniqueID int,
  item varchar(10),
  uploadedby varchar(50),
  uploaddate datetime
);
insert into imsexport values (1, 'Product A', 'Abel Antonio', '2013-01-01');
insert into imsexport values (2, 'Product B', 'Abel Antonio', '2013-01-01');
insert into imsexport values (3, 'Product C', 'Abel Antonio', '2013-01-01');
insert into imsexport values (4, 'Product A', 'Abel Antonio', '2013-01-01');
insert into imsexport values (5, 'Product A', 'Abel Antonio', '2012-01-01');
insert into imsexport values (6, 'Product A', 'Abel Antonio', '2012-01-01');
insert into imsexport values (7, 'Product A', 'Abel Antonio', '2012-01-01');
于 2013-01-09T06:14:19.390 に答える