SQL/Crystal记录选择

SQL/Crystal记录选择,sql,crystal-reports,Sql,Crystal Reports,我的SQL已经生锈了,我无法理解这一点 我有一个表,有一个年份字段,然后是一系列周期x字段。 所以日期看起来像 YEAR PERIOD1 PERIOD2 ... PERIOD12 2014 100 200 300 2015 200 300 400 我的问题是,要创建一个财政年度,我需要从2015年开始的时间段1-7和从2015年开始的时间段8-12 如果我能写一个select语句来

我的SQL已经生锈了,我无法理解这一点

我有一个表,有一个年份字段,然后是一系列周期x字段。 所以日期看起来像

YEAR     PERIOD1      PERIOD2  ...  PERIOD12
2014     100          200           300
2015     200          300           400
我的问题是,要创建一个财政年度,我需要从2015年开始的时间段
1-7和从2015年开始的时间段
8-12

如果我能写一个select语句来给我这个,或者在Crystal中写一个公式字段来给我这些周期的
SUM
,我会很生气


任何想法都会很棒。

你的问题提到了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;
您可以使用几个“UNIONALL”语句规范化数据。标准化后,可以更轻松地查询数据,并且可以应用案例报表来划分财政年度的期间范围,如下所示:

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;

祝你好运

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

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;

虽然我喜欢在一列中处理所有数据的想法,但我认为这可能比一组联合要快。

在您的数据中没有显示1-7或8-12部分。。如何分叉?使用….代替书写句点1到12。。。。为了显示它们都是相同的格式…不清楚,你能给我们输入数据和输出数据的表格或excel格式或图像布局,以了解更多。我尝试了这个。。。。从EMPLACTUAL_FBL_YEAR_V中选择t1.PERIOD8+t1.PERIOD9+t1.PERIOD10+t1.PERIOD11+t1.PERIOD12+t2.PERIOD1+t2.PERIOD2作为t1内部连接EMPLACTUAL_FBL_YEAR_V作为t2.YEAR=t1.YEAR+1,其中t1.YEAR='2014'继续获取ORA-00933:SQL命令未正确返回。。。。SQL命令未正确结束。。。。即使我在末尾添加了group by或order by,我仍然会得到相同的错误。是否需要分号?你没说这是哪个站台。没关系,这是神谕。