0

いくつか試しましたが、解決策が見つかりませんでした。どういうわけか、この結果を得ることができました。

クエリは次のとおりです。

DELIMITER ##
CREATE PROCEDURE test1(start_date DATE,end_date DATE)
BEGIN
   DECLARE done INT DEFAULT FALSE;   
   DECLARE a INT;
   DECLARE present INT;
   DECLARE total INT;
   -- Declare the cursor
   DECLARE id CURSOR
   FOR
   SELECT staff_id FROM ost_staff;
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
   -- Open the cursor
   DROP TEMPORARY TABLE IF EXISTS reports;
   CREATE TEMPORARY TABLE IF NOT EXISTS reports
   (
    staff_id INT(10),
    present INT(10),
total INT(10)
   );
   OPEN id;
   read_loop: LOOP
   FETCH id INTO a;
   IF done THEN
   LEAVE read_loop;
   END IF;
   INSERT INTO reports(staff_id,present,total)
   SELECT (COUNT(I.interval_start)) AS present, DATEDIFF(DATE_ADD(end_date,INTERVAL 1     DAY),start_date) AS total
    FROM effort_frequency E 
RIGHT OUTER JOIN time_intervals I ON I.interval_start = E.log_date 
AND E.staffid=a AND E.log_date BETWEEN start_date AND end_date
LEFT OUTER JOIN ost_holidays H ON H.holiday_date = I.interval_start
WHERE DATE_FORMAT(I.interval_start,'%a') = 'Sun' OR H.holiday_date = I.interval_start OR E.total_effortspent IS NOT NULL;

   -- Close the cursor   
   END LOOP;
   CLOSE id;
END ##

以下の結果が得られました:

+----------+-----------------+
| staff_id | present | total |
+----------+---------+-------+
|  (NULL)  |   23    |  24   |
|  (NULL)  |   22    |  24   |
+----------+---------+-------+

staff_idに対して(NULL)を取得していますが、staff_idを取得するにはどうすればよいですか?挿入ステートメントで宣言された変数「a」を使用しようとしましたが、その時点ではstaff_idしか取得できず、他の2つのフィールドは取得できませんでした。また、selectInsideinsertステートメントからstaff_idを取得できません。問題があります。

ここで必要なのは、変数'a'のstaff_idをその一時テーブルに挿入する必要があることです。

注:私はこのストアドプロシージャに本当に慣れていませんが、なんとかしてここまで管理されています。このソリューションを含め、SelectInsideInsertの使用方法の詳細を取得できれば便利です。

4

2 に答える 2

1

これを試して -

SELECT a, (COUNT(I.interval_start)) AS present, DATEDIFF(DATE_ADD(end_date,INTERVAL 1     DAY),start_date) AS total
于 2012-05-25T09:49:27.347 に答える
0

あなたINSERTは3つのフィールドを必要としますが、あなたのSELECTステートメントは2つだけを選択します:presenttotal

試す:

 SELECT E.staffid, (COUNT(I.interval_start)) 
 AS present, DATEDIFF(DATE_ADD(end_date,INTERVAL 1 DAY),start_date) AS total
于 2012-05-25T09:45:43.900 に答える