SQL / Crystal记录选择

时间:2015-03-12 05:19:34

标签: sql crystal-reports

我的SQL生锈了,我无法想出这个。

我有一个包含Year Field的表,然后是一系列Period x字段。 所以日期看起来像

YEAR     PERIOD1      PERIOD2  ...  PERIOD12
2014     100          200           300
2015     200          300           400

我的问题是,要创建一个财政年度,我需要期间1-7 from 2015 and 8-12 from 2015

如果我可以编写一个select语句来给我这个或者在Crystal中写一个公式字段来给我这些句号的SUM,我会被惹恼。

任何想法都会很棒......

2 个答案:

答案 0 :(得分:1)

您的问题提到了2015年的两个期间范围。如果确实如此,您可以添加每行的期间字段。

但是,如果2015年财政年度由2015年的1-7期和 2014 期间的8-12期定义,您可以如下所示进行处理。

给出Oracle中的示例设置,例如:

CREATE TABLE tbl
    (year int, period1 int, period2 int, period3 int, period4 int, period5 int, period6 int, period7 int, period8 int, period9 int, period10 int, period11 int, period12 int);

INSERT ALL 
    INTO tbl (year, period1, period2, period3, period4, period5, period6, period7, period8, period9, period10, period11, period12)
         VALUES (2014, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200)
    INTO tbl (year, period1, period2, period3, period4, period5, period6, period7, period8, period9, period10, period11, period12)
         VALUES (2015, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300)
SELECT * FROM dual;

您可以使用几个“union all”语句对数据进行规范化。一旦标准化,就可以更容易地查询数据,并且可以应用案例陈述来按财务年度的期间范围进行拆分,如下所示:

select case when period between '08' and '12' then year + 1
            when period between '01' and '07' then year
            else null
       end fin_year,
       sum(amount) amount
  from (select year, '01' period, period1  amount from tbl union all
        select year, '02' period, period2  amount from tbl union all
        select year, '03' period, period3  amount from tbl union all
        select year, '04' period, period4  amount from tbl union all
        select year, '05' period, period5  amount from tbl union all
        select year, '06' period, period6  amount from tbl union all
        select year, '07' period, period7  amount from tbl union all
        select year, '08' period, period8  amount from tbl union all
        select year, '09' period, period9  amount from tbl union all
        select year, '10' period, period10 amount from tbl union all
        select year, '11' period, period11 amount from tbl union all
        select year, '12' period, period12 amount from tbl
       )
group by case when period between '08' and '12' then year + 1
              when period between '01' and '07' then year
              else null
         end;
祝你好运!

答案 1 :(得分:1)

您可以按顺序返回句点(或者只是将它们全部添加)并以任何方便的方式对它们进行别名。

select t1.PERIOD8 + ... t1.PERIOD12 + t2.PERIOD1 + t2.PERIOD2, + ... t1.PERIOD7
from T as t1 inner join T as t2 on t2.YEAR = t1.YEAR + 1
where t1.YEAR = 2014;

我想这可能比一堆工会更快,尽管我喜欢能够处理单个列中所有数据的想法。

相关问题