php - MySql 查询给出与 phpmyadmin 不同的输出,这里 group_concat 不起作用

标签 php mysql phpmyadmin

mysql查询有什么错误,请大家帮忙。 谢谢!!

数据库表(如下)

CREATE TABLE tbl_sales
    (`plantcode` varchar(200), `materialcode` varchar(200), `nrv` varchar(200) ,`monthyear` date)
;   
INSERT INTO tbl_sales
    (`plantcode`, `materialcode`, `nrv`, `monthyear`)
VALUES
    ('9001','800000006','210','2015-02-01'),
    ('9001','800000006','220','2015-02-01'),
    ('9001','800000006','350','2015-02-01'),
    ('9001','800000006','100','2015-03-01'),
    ('9001','800000006','421.00','2015-04-01'),
    ('9001','400000100','257','2015-05-01'),
    ('9001','400000100','233','2015-07-01'),
    ('9002','800000006','710','2016-02-01'),
    ('9002','800000006','325','2016-06-01')
;

我创建了按日期(月年字段)将动态行转换为动态列的查询。

SELECT plantcode,materialcode, GROUP_CONCAT(DISTINCT
        CONCAT('SUM(CASE WHEN DATE_FORMAT(monthyear,''%b %y'')= ''',
          DATE_FORMAT(monthyear,'%b %y'),
                       ''' THEN nrv ELSE 0 END) AS '' ',
                       DATE_FORMAT(monthyear, '%b %y'),'"' 
                     )  
                  ORDER BY monthyear)
    from tbl_sales
    GROUP BY materialcode

当我在 phpmyadmin 中使用此查询时,它显示如下所示的 optput

Output From PHPMyadmin

我需要如下所示的实际输出:

Plantcode   Materialcode    Feb 2015    Mar 2015    Apr 2015    May 2015
9001        800000006       780         100         421.00      257

各位,我已经完成了自定义代码...请检查下面...

$qry1 = mysql_query("SELECT DISTINCT(`monthyear`) FROM `tbl_sales` ORDER BY `monthyear` ASC");
$rcount = mysql_num_rows($qry1);
$sql2 = "SELECT `plantcode`,`materialcode`, ";
$dynamic_column = array();
while ($rows = mysql_fetch_assoc($qry1)) 
{
    $dynamic_column[] = $rows['monthyear'];
    $sql2 .= "SUM(IF(`monthyear` = '{$rows['monthyear']}',`nrv`,0)) AS '{$rows['monthyear']}'";
    if ($rcount > 1) 
    {
        $sql2 .=',';
    }
    $rcount--;
}

$sql2 .= " FROM `tbl_sales` WHERE `plantcode`='9001' AND `monthyear` BETWEEN '2015-01-01' AND '2016-06-30' GROUP BY `materialcode`,`year` ORDER BY `year`,`monthyear`,`dsapcode` ASC ";

检查下面的图像输出屏幕......

enter image description here

最佳答案

您可以尝试这样的方法,因为您使用materialcode作为group by,所以结果中的plantcode没有任何意义。

SQL Fiddle

MySQL 5.6:

CREATE TABLE tbl_sales
    (`plantcode` varchar(200), `materialcode` varchar(200), `nrv` varchar(200) ,`monthyear` date)
;   
INSERT INTO tbl_sales
    (`plantcode`, `materialcode`, `nrv`, `monthyear`)
VALUES
    ('9001','800000006','210','2015-02-01'),
    ('9001','800000006','220','2015-02-01'),
    ('9001','800000006','350','2015-02-01'),
    ('9001','800000006','100','2015-03-01'),
    ('9001','800000006','421.00','2015-04-01'),
    ('9001','400000100','257','2015-05-01'),
    ('9001','400000100','233','2015-07-01'),
    ('9002','800000006','710','2016-02-01'),
    ('9002','800000006','325','2016-06-01')
;

查询:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(IF(monthyear = ''',
      monthyear,
      ''', nrv, 0)) AS `',
      DATE_FORMAT(monthyear,'%b %y'), '`'
    )
  ) INTO @sql
FROM tbl_sales;
SET @sql = CONCAT('SELECT plantcode, materialcode, ', @sql, ' FROM tbl_sales GROUP BY materialcode');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

<强> Results :

| plantcode | materialcode | Feb 15 | Mar 15 | Apr 15 | May 15 | Jul 15 | Feb 16 | Jun 16 |
|-----------|--------------|--------|--------|--------|--------|--------|--------|--------|
|      9001 |    400000100 |      0 |      0 |      0 |    257 |    233 |      0 |      0 |
|      9001 |    800000006 |    780 |    100 |    421 |      0 |      0 |    710 |    325 |

关于php - MySql 查询给出与 phpmyadmin 不同的输出,这里 group_concat 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38117233/

相关文章:

php - 无法加载 phpMyAdmin 配置(./config.inc.php :31): parse error

php - Wordpress WPBakery 禁用 prettyPhoto 并使用响应式灯箱和画廊

php - mysql 查询返回空结果

php - 如何以与数组相同的顺序将索引数组的值插入到 MySQL 表中

python - 将 CSV Scrape 转换为 mySQL 插入

c# - 使用 EF 和 Linq 通过另一个表字段值查找表中的字段

php - 从另一个表中不存在的表中选择mysql php

php - 127.0.0.1 可访问/工作但本地主机不可访问/不工作

php - 基于2个子元素选择元素

mysql - 无法将查询结果插入到 phpMyAdmin 中的 SQL 查询中