2016-08-31 8 views
1

私は1つの大きなmysqlクエリを持っており、以下のように1つのカラム結果を示します。 enter image description hereMysqlの結果操作

ここで、個々のエンティティをvisit_typeに数えたいと思います。どうやってやるの ?

結果:

enter image description here

私は他のSQLクエリを望んでいません。私はそのことが私の主な質問のなかで起こることを願っています:

 SELECT DATE(`fc`.`date`) AS Date,`f`.`name` AS facility_Name, count(*), 
    `fc`.`provider_id`, CONCAT(`u`.`fname`, ' ', `u`.`lname`) AS 
    provider_name, 
    GROUP_CONCAT((`oc`.`pc_catname`)) AS `visit_type` 
    FROM `form_encounter` AS fc 
    LEFT JOIN `facility` AS f ON (`fc`.`facility_id` = `f`.`id`) 
    LEFT JOIN `users` AS u ON (`fc`.`provider_id` = `u`.`id`) 
    LEFT JOIN `openemr_postcalendar_categories` AS oc ON (`fc`.`pc_catid` = `oc`.`pc_catid`) 
    WHERE DATE(`fc`.`date`) BETWEEN '2016-06-17' AND '2016-06-24' 
    GROUP BY `fc`.`facility_id`, DATE(`fc`.`date`),provider_name 
    ORDER BY DATE(`fc`.`date`) ASC 

助けを借りてください。

+1

@Jens:OPが使用する 'GROUP_CONCAT()'ので、彼はそれが私はちょうどそれについて尋ねるつもりだったこの –

+0

@juergendのように格納されませんでした。次に、掲載されたクエリは結果を生成したものではありません。 –

+0

@TimBiegeleisen:そうだと思います。 OPは、GROUP_CONCAT((oc.pc_catname))の1つのrelavant列結果を出力しました。visit_type' –

答えて

0

これを行うには、2つのレベルの集計が必要です。このような何か:

SELECT Date, facility_Name, Provider_Id, Provider_Name, 
     GROUP_CONCAT(pc_catname, '(', cnt, ')') 
FROM (SELECT DATE(fc.`date`) AS Date, f.name AS facility_Name, 

      fc.provider_id, CONCAT(u.fname, ' ', u.lname) AS provider_name, 
      pc_catname, COUNT(*) as cnt 
     FROM form_encounter fc LEFT JOIN 
      facility f 
      ON fc.facility_id = f.id LEFT JOIN 
      users u 
      ON fc.provider_id = u.id LEFT JOIN 
      openemr_postcalendar_categories oc 
      ON fc.pc_catid = oc.pc_catid 
     WHERE DATE(fc.`date`) BETWEEN '2016-06-17' AND '2016-06-24' 
     GROUP BY fc.facility_id, DATE(fc.date), provider_name, pc_catname 
    ) x 
GROUP BY facility_id, date, provider_id, provider_name 
ORDER BY DATE(fc.date) ASC; 
+0

これは動作しません –