sql >> Databasteknik >  >> RDS >> Mysql

Gruppera efter flera kolumner på en enda MySql-lagrad procedur

Ja, det är möjligt att använda en Dynamisk SQL . Vi kan skapa en frågesträng och sedan förbereda och köra den. Detta gör att vi kan ange ett dynamiskt kolumnnamn, vilket inte är möjligt direkt.

Du kommer också att behöva använda ytterligare en parameter för att specificera vilken kolumn som ska användas i Group By

DELIMITER $$

CREATE DEFINER=`root`@`localhost` 
  PROCEDURE `GetChartApprovedData`(in siteValue varchar(45),
                                   in skillValue varchar(100), 
                                   in shiftValue varchar(100), 
                                   in tmValue varchar(45), 
                                   in grpmValue varchar(45), 
                                   in dateValue date, 
                                   in dateValue1 date, 
                                   in groupByColumn varchar(64)) 
-- add extra in parameter, groupByColumn, to specify which column to group upon 

BEGIN

SET query_str = CONCAT('SELECT 
                          count(agentlogin) AS totalApproved, 
                          shift AS Shift, 
                          skill AS Skill, 
                          tm AS TM, 
                          grpM AS GrpM
                        FROM approved
                        WHERE (sitevalue IS NULL
                               OR site = sitevalue)
                          AND (skillvalue IS NULL
                               OR skill = skillvalue)
                          AND (shiftvalue IS NULL
                               OR shift = shiftvalue)
                          AND (tmValue IS NULL
                               OR tm = tmValue)
                          AND (grpmValue IS NULL
                               OR grpM = grpmValue)
                          AND (dateValue IS NULL
                               OR date BETWEEN dateValue AND dateValue1)
                        GROUP BY ', 
                        groupByColumn); -- concatenate the group by column param

-- prepare the query
PREPARE stmt FROM query_str;

-- execute the query
EXECUTE stmt;

-- Clear up
DEALLOCATE PREPARE stmt;

END $$

DELIMITER ;


  1. java.time.LocalDate.getDayOfWeek() till java.util.Calendar.get(DAY_OF_WEEK)

  2. Kämpar med anpassad SQL-fråga

  3. SQLiteReadOnlyDatabaseException:försök att skriva en skrivskyddad databas (kod 1032)

  4. Installera exempelscheman för Oracle 12c med hjälp av Database Configuration Assistant