查询SQL列日期范围

时间:2015-10-21 14:14:28

标签: sql

我现在遇到一个问题,我已经看到了一个数据库,其数据的布局如下:

'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?

提前致谢

2 个答案:

答案 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