0

我正在尝试在 SQL 中创建一个数据抽象,我可以在其中选择要查看员工信息的季度。现在我使用命名系统 Q1_P1_N 来表示“Quarter 1 Project 1 name”,而 Q1_P1_W 是“...project 1 weight”。员工可以从事多个项目。到目前为止,我所拥有的是:

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

要使用现有数据结构做你想做的事情,需要使用准备好的语句(你将所需的语句构建为你 then和SELECT的字符串)。PREPAREEXECUTE

但是,您可能会发现更改数据结构更容易:

+--------+---------+---------+--------+
| EMPID| 季度 | 项目 | 重量 |
+--------+---------+---------+--------+
| 1000 | 1 | 一个 | 0.50 |
| 1000 | 1 | 乙| 0.50 |
| 1001 | 1 | 一个 | 1.00 |
| 1010 | 1 | 乙| 1.00 |
| 1011 | 1 | 一个 | 0.50 |
| 1011 | 1 | 乙| 0.50 |
+--------+---------+---------+--------+
于 2012-05-24T20:28:22.810 回答
0

在您的选择语句中,字段中有一个变量,该变量应该是表中的列名。您需要将 @Qx_P1_W 切换为 Q1_P1_W。

于 2012-05-24T20:05:58.943 回答