答案 0 :(得分:1)
如果您要基于日期的月份显示不同的列,则可以通过结合elt()和month()函数来实现此目的来进行单个查询:
select elt(month('2018-01-30'),jan, feb, mar, ..., dec) as mon from yourtable
elt()
根据第一个参数中提供的索引返回第N个参数。 month()
函数返回日期中的月份号(例如1月=> 1)。
如果要基于日期显示不同的列数,则对于单个查询是不可能的,因为必须在查询中固定列数。在这种情况下,您需要编写使用动态sql生成查询的存储过程,或者编写使用外部编程语言来动态汇编和执行这种查询的代码。
更多说明:
存储在列中的数据似乎是数字,但仍将它们存储为字符串。 decimal
数据类型似乎更合适。
请考虑更改数据结构,并使用一个month或year_month列加上一个price列,而不是几个月的列。总计和平均值可以随时计算。