解决了
我很抱歉,伙计们,这很容易,但是工作日把我的脑子弄坏了。
我只需要根据 id 计算总和就可以得到我需要的东西,就像这样:
SET @sql = CONCAT('SELECT tt.Id, SUM(tt.Values) AS TOTAL, ' @sql, ' FROM db.Table tt GROUP BY tt.Id');
谢谢你的帮助!
非常感谢您的帮助:)
我有一个生成的表如下:
id | key1 | key2 | ... | keyN
id_val1 | k1_val1 | k2_val1 | ... | kN_val1
... | ... | ... | ... | ...
id_valM | k1_valM | k2_valM | ... | kN_valM
它是用代码生成的:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(tt.Keys = ''',
tt.Keys,
''', tt.Values, NULL)) AS ',
tt.Keys
)
) INTO @sql
FROM db.Table tt;
SET @sql = CONCAT('SELECT tt.Id, ', @sql, ' FROM db.Table tt GROUP BY tt.Id WITH ROLLUP');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
我要做的是添加 Total 列,如下所示:
id | key1 | key2 | ... | keyN | Total
id_val1 | k1_val1 | k2_val1 | ... | kN_val1 | sum(k1_val1, k2_val1,...,kN_val1)
... | ... | ... | ... | ... | ...
id_valM | k1_valM | k2_valM | ... | kN_valM | sum(k1_valM, k2_valM,...,kN_valM)
“WITH ROLLUP”不起作用,它只添加了另一行,列中有最大值,而我需要行中的总和。
问题是列数及其名称可能随时间而不同。正确使用他们的名字本身就是问题:)。
例如,我得到了列的名称,但是如何使用它们,因为它们不属于任何表?我可以将动态构建的 sql 转换为以下外观。但是你能告诉我@xxx 应该是什么样子吗:
SET @sql = CONCAT('SELECT tt.Id, SUM(', @xxx,') AS TOTAL, ' @sql, ' FROM db.Table tt GROUP BY tt.Id WITH ROLLUP');
在此先感谢,迈克尔。