我希望更新一个表,其中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中是否可以这样?
答案 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