Basierend auf Ihren Eingaben:
- 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
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;
Bitte überprüfen Sie die Antwort unten. –