2017-02-15 4 views
0

У меня есть таблица с именем область, имеющие две колонок: наличие region_id является первичным ключомMySql StoredProcedure с внутренним соединением

 |region_id | region_code | 
     | ----------+-------------+ 
     |   1 | Asia  | 
     |   2 | Can   | 
     |   3 | Cen   | 
     |   4 | West  | 
     |   5 | GNW   | 
     ----------+-------------+ 

И у меня есть еще один сотрудник таблицы, в которой emp_id является первичный ключ и region_id_fk является внешним ключом отображается в область таблицы:

 +------+---------+---------+------------+---------------+---------+------------ 
    |emp_id| emp_name|global_id|region_id_fk|attendance_date|ispresent| is_billable| 
    +------+---------+---------+------------+---------------+---------+--------- 
    | 1 | andrew | candrew |   1 | 2017-02-13 |  1 |   1 | 
    | 2 | andrew | candrew |   1 | 2017-02-14 |  1 |   1 | 
    | 3 | andrew | candrew |   1 | 2017-02-15 |  1 |   1 | 
    | 4 | andrew | candrew |   1 | 2017-02-16 |  1 |   1 | 
    | 5 | andrew | candrew |   1 | 2017-02-17 |  0 |   1 | 
    | 6 | simon | csimon |   1 | 2017-02-13 |  1 |   1 | 
    | 7 | simon | csimon |   1 | 2017-02-14 |  1 |   1 | 
    | 8 | simon | csimon |   1 | 2017-02-15 |  1 |   1 | 
    | 9 | simon | csimon |   1 | 2017-02-16 |  1 |   1 | 
    | 10 | simon | csimon |   1 | 2017-02-17 |  1 |   1 | 
    | 11 | peter | cpeter |   2 | 2017-02-13 |  1 |   1 | 
    | 12 | peter | cpeter |   2 | 2017-02-14 |  1 |   1 | 
    | 13 | peter | cpeter |   2 | 2017-02-15 |  1 |   1 | 
    | 14 | peter | cpeter |   2 | 2017-02-16 |  1 |   1 | 
    | 15 | alvin | calvin |   2 | 2017-03-13 |  1 |   0 | 
    | 16 | thomas | thomas |   2 | 2017-03-14 |  0 |   1 | 
    | 17 | samuel | csamuel |   2 | 2017-03-15 |  1 |   0 | 
    | 18 | jackson | cjackson|   2 | 2017-03-16 |  1 |   0 | 
    | 19 | clinda | clinda |   2 | 2017-03-17 |  1 |   1 | 
    +--------+----------+-----------+--------------+-----------------+------ 

у меня уже есть этот тип запроса, в котором я использовал внутреннее соединение и считать в хранимой процедуре:

DELIMITER $$ 
DROP PROCEDURE IF EXISTS test.some_proc $$ 
CREATE PROCEDURE test.some_proc(IN in_is_billable INT,IN in_month INT,IN in_ispresent INT) 
BEGIN 
     DECLARE capacitycount INT; 
     DECLARE hrs INT; 
     SET hrs=8; 
     SELECT COUNT(ispresent)*8 AS team_capacity, region_code 
     FROM employee emp 
     INNER JOIN region r ON r.region_id=emp.region_id_fk 
     WHERE (is_billable=in_is_billable) AND 
     (MONTH(attendance_date)=in_month) AND 
     (ispresent=in_ispresent); 
END $$ 
DELIMITER ; 

И его давая мне ниже результат: команда емкость | region_code 128 | Азия

Я хочу, чтобы моя хранимая процедура, чтобы дать всю область код, присутствующий в области таблицы вместе с мощностью команды, которая IM вычисления в хранимой процедуре, которая дает мне правильный ответ.

Результат должен быть таким, но на данный момент я получаю только способность команды только для одного региона.

team capacity|region_code 
    128   |Asia 
    39   |Can 
    68   |Cen 

Любая помощь будет оценена, Заранее спасибо :)

ответ

0

вы пропустили группу, в вашем синтаксисе

DELIMITER $$ 
DROP PROCEDURE IF EXISTS test.some_proc $$ 
CREATE PROCEDURE test.some_proc(IN in_is_billable INT,IN in_month INT,IN in_ispresent INT) 
BEGIN 
     DECLARE capacitycount INT; 
     DECLARE hrs INT; 
     SET hrs=8; 
     SELECT COUNT(ispresent)*8 AS team_capacity, region_code 
     FROM employee emp 
     INNER JOIN region r ON r.region_id=emp.region_id_fk 
     WHERE (is_billable=in_is_billable) AND (MONTH(attendance_date)=in_month) AND 
     (ispresent=in_ispresent) 
     group by r.region_code; 
END $$ 
DELIMITER ; 
+0

Спасибо большое, теперь получаю правильный ответ @Ankit Агроэл –

+0

Accept этот ответ. Это будет полезно для других, чтобы избавиться от своих проблем –