我正在尝试在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 |
+------+---------+---------+---------+---------+
由于
答案 0 :(得分:0)
在select语句中,字段中的变量应该是表中的列名。您需要为Q1_P1_W切换@ Qx_P1_W。
答案 1 :(得分:0)
要使用现有数据结构执行所需操作,您需要使用prepared statements(将所需的SELECT
语句构建为字符串,然后PREPARE
和EXECUTE
)。
但是,您可能会发现更改数据结构更容易:
+------+---------+---------+--------+ | EMPID| quarter | project | weight | +------+---------+---------+--------+ | 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 | +------+---------+---------+--------+