Mysql根据列名和字段值连接表

时间:2017-11-15 10:58:05

标签: mysql

我希望更新一个表,其中tableB中单元格的值是对tableA中列名的引用。在下面的现有表格和所需输出的示例下解释有点困难:

现有表格

TableA
Dates       |   f1  |   f2  |   f3
1-1-2017    |   0   |   0   |   0       
2-1-2017    |   0   |   0   |   0       
3-1-2017    |   0   |   0   |   0       
4-1-2017    |   0   |   0   |   0   

TableB
Dates       |   Label   |   Counter 
1-1-2017    |   f1      |   1   
1-1-2017    |   f2      |   2   
2-1-2017    |   f1      |   1   
2-1-2017    |   f2      |   3   
2-1-2017    |   f3      |   2   
3-1-2017    |   f2      |   4   
4-1-2017    |   f3      |   2   
4-1-2017    |   f2      |   1

所需的输出

TableA
Dates       |   f1  |   f2  |   f3
1-1-2017    |   1   |   2   |   0       
2-1-2017    |   1   |   3   |   2       
3-1-2017    |   0   |   0   |   4       
4-1-2017    |   0   |   1   |   2   

在mysql中是否可以这样?

1 个答案:

答案 0 :(得分:1)

此代码将生成类似于您的输出的结果,但它是一个结果,您无法直接更新它(您正常更新TableB) 此外,如果没有特定日期的计数,则不会显示该日期的记录,您可能希望交叉加入日期表。

SELECT A.Dates
,SUM(CASE WHEN Label = 'f1' THEN Counter ELSE 0 END) AS f1
,SUM(CASE WHEN Label = 'f2' THEN Counter ELSE 0 END) AS f2
,SUM(CASE WHEN Label = 'f3' THEN Counter ELSE 0 END) AS f3 
FROM TableA A
LEFT JOIN TableB B ON B.Dates = A.Dates
GROUP BY A.Dates