我现在遇到一个问题,我已经看到了一个数据库,其数据的布局如下:
'ID | CALCULATIONS | 2015-06 | 2015-07 | 2015-08 | 2015-09
1 Spend 100 300
1 Forecast 200 200 300 800
2 Spend 300 400 600 300
2 Forecast 200 0 900 200
1 Spend 400 700
我知道如何写一个传统的'查询基于计算两列之间的花费,即
ID | CALCULATIONS | Date | Amount
1 Spend 01/06/15 100
但是有没有办法根据我当前(problimatic)数据库的布局执行查询? 例如,选择x从x开始,其中日期在y&之间。 z?
提前致谢
答案 0 :(得分:1)
我最好的建议是创建一个视图,使表格更加清晰:
create view v_table as
select id, calculations, '2015-06' as yyyymm, ?2015-06? as value
from t
union all
select id, calculations, '2015-07' as yyyymm, ?2015-07? as value
from t
union all
. . .;
然后,您可以使用v_table
编写所需的查询。请注意,上面的?
是指数据库使用的任何转义分隔符,通常是双引号,反引号或方括号。
“date”是YYYY-MM格式的字符串,可用于相等和比较之间。
答案 1 :(得分:0)
你正在寻找一个坦克。在各种SQL系统中有不同的方法,“标准”SQL方式类似于:
Select ID, Calculations, '2015-06-01' As Date, [2015-06] As Amount
UNION
Select ID, Calculations, '2015-07-01' As Date, [2015-07] As Amount
UNION
Select ID, Calculations, '2015-08-01' As Date, [2015-08] As Amount
UNION
Select ID, Calculations, '2015-09-01' As Date, [2015-09] As Amount
使用适当的特定于数据库的方法将'2015-06-01'
转换为DateTime值,并使用适当的分隔符以名称引用列2015-06
。