2017-06-07 15 views
0

Ich muss Daten aus der gespeicherten Prozedur abrufen und in einem Dashboard anzeigen. Der Hintergrund dafür ist.MySQL - Gespeicherte Prozedur

Für jede ausgewählte Abfrage in der Stored-Prozedur wird nur einen Datensatz zurückgeben Ich habe etwa 10 Abfragen wie diese. Abgesehen davon habe ich auch eine Abfrage, die etwa 5 Zeilen in der gleichen gespeicherten Prozedur zurückgibt.

Ich möchte diese 5 Datensätze als 1 Zeile zusammen mit den anderen Abfragen in der gleichen gespeicherten Prozedur dargestellt werden.

Beispiel:

CALL dashboard_proc() Will return

Date  Amount total_orders 
1-1-2017 500.00 50 

Ein Teil von oben Ausgang möchte ich eine weitere Auswahlabfrage in der gleichen Stored Procedure (dashboard_proc) anzuhängen. Die andere Frage, die

Place  Total 
Hyderabad 100 
Bangalore 100 
Chennai  200 
Mumbai  100 

zurück Und ich brauche unter

Date  Amount total_orders Hyderabad Bangalore Chennai Mumbai 
1-1-2016 500.00  50   100  100  200  100 
+0

Bitte überprüfen Sie die Antwort unten. –

Antwort

1

Basierend auf Ihren Eingaben:

  1. Erster Teil des Berichts hat nur einen Datensatz so habe ich verwendet, die folgende Struktur
CREATE TABLE `ResultPart1` (
    `ReportDate` date NOT NULL, 
    `Amount` float DEFAULT NULL, 
    `total_orders` int(11) DEFAULT NULL 
) 

insert into ResultPart1 select '2017-01-01', 500.00 , 50;

2. Zweiter Teil des Berichts werden verschiedene Orte haben, hier die verwendeten Orte sind Wort und kein verwendet Schlüsselwort.

CREATE TABLE `ResultPart2` (
     `Place` varchar(50) NOT NULL, 
     `Total` int(11) DEFAULT NULL 
    ) 
insert into ResultPart2() 
Select 'Hyderabad', 100 union 
Select 'Bangalore' , 100 union 
Select 'Chennai' , 200 union 
Select 'Mumbai'  , 100; 

3. Erstellen Stored Procedure

CREATE PROCEDURE `new_procedureDashboard`() 
BEGIN 

Declare vPlaceCount int; 
Declare vquery varchar(1000); 
declare vPlace varchar(1000); 
declare vPlaceTotal int; 
-- select * from ResultPart1; 
-- Select * from ResultPart2; 

CREATE TEMPORARY TABLE IF NOT EXISTS Table_ResultPart2 
(
    Id int NOT NULL AUTO_INCREMENT, 
    Place varchar(100), 
    PlaceTotal int , 
    PRIMARY KEY (id)  
); 
insert into Table_ResultPart2(Place,PlaceTotal) 
Select distinct Place,Total from ResultPart2; 

SET vPlaceCount=(Select count(*)from Table_ResultPart2); 
WHILE vPlaceCount>0 DO 
     SET vPlace=(Select Place from Table_ResultPart2 where Id=vPlaceCount); 
     SET vPlaceTotal=(Select PlaceTotal from Table_ResultPart2 where Id=vPlaceCount); 
     SET vquery=concat("", "alter table ResultPart1 add " ,vPlace ," int ;"); 
     Select vquery into @AddColumn; 
     PREPARE stmt FROM @AddColumn; 
     -- Select @AddColumn; 
     EXECUTE stmt; 
     DEALLOCATE PREPARE stmt; 
     SET vquery=""; 

     -- Select vPlace,vPlaceTotal; 
     -- Update 
     SET SQL_SAFE_UPDATES = 0; 
     SET vquery=concat("", "update ResultPart1 SET " ,vPlace ," = " ,vPlaceTotal ," where 1=1 ;"); 

     Select vquery into @UpdateColumn; 
     -- select @UpdateColumn; 
     PREPARE stmt1 FROM @UpdateColumn; 
     -- Select @AddColumn; 
     EXECUTE stmt1; 
     DEALLOCATE PREPARE stmt1; 
     SET SQL_SAFE_UPDATES = 1; 



     SET vPlaceCount=vPlaceCount-1; 
     SET vPlace="" ; 
END WHILE; 
Select * from ResultPart1; 
drop TEMPORARY TABLE IF EXISTS Table_ResultPart2; 
END 

Erläuterung: Added die gewünschte Spalte in der Haupt resultierende Tabelle Schleife und aktualisiert die Werte der neu platzierten (hinzugefügten) Spalte mit der Schleife . Sie müssen Änderungen an Ihrer gespeicherten Prozedur vornehmen, da ich permanente Tabellen verwendet habe (ResultPart1 und ResultPart2).

4. Ergebnis enter image description here

Alter Statements Spalte in Nur Fall fallen wollen Sie die gespeicherte Prozedur erneut auszuführen.

alter table ResultPart1 drop column Hyderabad; 
alter table ResultPart1 drop column Bangalore; 
alter table ResultPart1 drop column Chennai; 
alter table ResultPart1 drop column Mumbai; 
Verwandte Themen