2016-06-30 4 views
0

Gibt es einen Fehler in MySQL Abfrage, jemand bitte helfen. Danke !!MySql Abfrage gibt verschiedene Ausgabe von phpmyadmin, hier Group_concat nicht funktionieren

Datenbank-Tabelle (Unter)

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') 
; 

Ich erstelle Abfrage für dynamische Reihe umwandeln in dynamische Spalte nach Datum (monthyear-Feld).

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 

, wenn ich diese Abfrage in phpMyAdmin verwenden, zeigt es optput wie unten

Output From PHPMyadmin

Und ich wie unter tatsächlichen Ausgang benötigen:

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

GUYS ich mit meiner benutzerdefinierten Fertig code .... überprüfen Sie unten ...

$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 "; 

prüfen unten Bildschirm Bildausgabe ....

enter image description here

+0

'9001 800000006' hat keine Daten im Mai 2015. – Blank

+0

Ich habe mehr Daten in meiner Tabelle, hier erläutere ich als Beispiel. – Amit

Antwort

1

Sie so etwas wie dies versuchen können, weil du materialcode für group by verwenden, macht so plantcode im Ergebnis keinen Sinn.

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') 
; 

Abfrage:

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 | 
+0

Danke !!! Diese Abfrage funktioniert gut mit sqlfiddle, aber funktioniert nicht in phpmyadmin, Liebe gibt es eine Möglichkeit, PHP-Code zu verwenden? – Amit

+0

Ich glaube, es gibt eine Möglichkeit, PHP zu verwenden, um dies zu erreichen. Allerdings kann ich Ihnen nur eine Antwort geben. :-( – Blank

+0

Sie sind richtiger Mann. Aber ich bin PHP-Programmierer und ich will Monatsjahresumsatzaufzeichnungen, also bin ich sehr verwirrt, was ich tun kann? Das ist sehr typische Aufgabe ohne Pivotabfrage. Danke wieder. – Amit