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
我需要如下所示的实际输出:
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 ";
检查下面的图像输出屏幕......
最佳答案
您可以尝试这样的方法,因为您使用materialcode
作为group by
,所以结果中的plantcode
没有任何意义。
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/