0

SQLでデータ抽象化を作成しようとしています。ここで、従業員情報を確認する四半期を選択できます。現在、「第1四半期のプロジェクト1の名前」にネーミングシステムQ1_P1_Nを使用しており、Q1_P1_Wは「...プロジェクト1の重み」です。従業員は複数のプロジェクトに取り組むことができます。これまでのところ、私が持っているのは:

CREATE PROCEDURE effort_lookup4(IN proj_name VARCHAR(20), IN quarter INT(1))
BEGIN
SET @Qx_P1_N = CONCAT('Q', quarter, '_P1_N');
SET @Qx_P2_N = CONCAT('Q', quarter, '_P2_N');
SET @Qx_P1_W = CONCAT('Q', quarter, '_P1_W');
SET @Qx_P2_W = CONCAT('Q', quarter, '_P2_W');
SET @var1 = (SELECT sum(@Qx_P1_W) FROM table_test WHERE @Qx_P1_N = proj_name);
SET @var2 = (SELECT sum(@Qx_P2_W) FROM table_test WHERE @Qx_P2_N = proj_name);

私の問題は、@Qx_P1_Nまたは@Qx_P1_Wを使用してクエリを呼び出すと、実際には正しいクエリが渡されず、何が間違っているのか理解できないことです。これは非常に簡単なはずです。SQLの使用は初めてです。

これは、テーブルがどのように見えるかの例です。ただし、四半期を通じてQ2_P1_Nなどに続きます。

+------+---------+---------+---------+---------+
| EMPID| Q1_P1_N | Q1_P2_N | Q1_P1_W | Q1_P2_W |
+------+---------+---------+---------+---------+
| 1000 | ProjA   | ProjB   |    0.50 |    0.50 |
| 1001 | ProjA   | NULL    |    1.00 |    NULL |
| 1010 | ProjB   | NULL    |    1.00 |    NULL |
| 1011 | ProjA   | ProjB   |    0.50 |    0.50 |
+------+---------+---------+---------+---------+

ありがとう

4

2 に答える 2

0

selectステートメントでは、テーブルの列名となる変数がフィールドにあります。@Qx_P1_WをQ1_P1_Wに切り替える必要があります。

于 2012-05-24T20:05:58.943 に答える
0

既存のデータ構造で必要なことを行うには、プリペアドステートメントを使用する必要があります(目的のSELECTステートメントを文字列として作成し、それを実行しますPREPAREEXECUTE

ただし、データ構造を変更する方が簡単な場合があります。

+ ------ + --------- + --------- + -------- +
| EMPID | 四半期| プロジェクト| 重量|
+ ------ + --------- + --------- + -------- +
| 1000 | 1 | A | 0.50 |
| 1000 | 1 | B | 0.50 |
| 1001 | 1 | A | 1.00 |
| 1010 | 1 | B | 1.00 |
| 1011 | 1 | A | 0.50 |
| 1011 | 1 | B | 0.50 |
+ ------ + --------- + --------- + -------- +
于 2012-05-24T20:28:22.810 に答える