首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将前几年的数据添加到此SQL查询中(也可以使其变得更简单)?

问如何将前几年的数据添加到此SQL查询中(也可以使其变得更简单)?
EN

Stack Overflow用户
提问于 2014-09-08 11:58:49
回答 1查看 88关注 0票数 1

我已经开始使用高级图表,并提出了下面的SQL查询来将数据放在图表上。

它显示了客户在本年度每月下订单的数量。

代码语言:javascript
复制
SELECT    TO_CHAR(TRUNC(Orders.OrdDate,'MM'),'Month'), COUNT(Orders.OrdNo)
FROM      Orders
WHERE     Orders.CusNo = '" . $_SESSION['customer'] . "'
AND       Orders.EntryDate LIKE '%-14'
GROUP BY  TO_CHAR(TRUNC(Orders.EntryDate,'MM'),'Month')

问题

  1. 这个SQL查询是否可以变得更简单,因为它非常混乱?
  2. 如何将前几年的数据添加到同一个SQL查询中?

目前,我正在使用高图表的结果,如:

oci_execute($result);

代码语言:javascript
复制
      while ($row = oci_fetch_array($result)) {
         $data0[] = $row['0'];
         $data1[] = $row['1'];
      }

      ...

      xAxis: {
          categories: ["<?php echo join($data0, '","') ?>"]
      },

      series: [{
         name: 'Current Year',
         color: '#2196f3',
         data: [<?php echo join($data1, ',') ?>]
      }],

理想情况是:

$data0将是一月。

$data1将是当月本年度的订单数量。

$data2将是该月份前一年的订单数量。

我只是想不出如何在一个SQL查询中做到这一点。

我正在使用Oracle 8i。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-08 13:40:42

我将使用表别名编写查询:

代码语言:javascript
复制
SELECT TO_CHAR(TRUNC(o.OrdDate, 'MM'), 'Month'), COUNT(o.OrdNo)
FROM Orders o
WHERE o.CusNo = '" . $_SESSION['customer'] . "' AND o.EntryDate LIKE '%-14'
GROUP BY  TO_CHAR(TRUNC(o.EntryDate, 'MM'), 'Month');

我有点担心where子句使用EntryDate,select使用OrdDate。不过,让我假设,这是故意的。如果您希望按月份进行两年,我将使用数字月份格式而不是名称,并在where子句中修正日期比较:

代码语言:javascript
复制
SELECT TO_CHAR(o.OrdDate, 'YYYY-MM'), COUNT(o.OrdNo)
FROM Orders o
WHERE o.CusNo = '" . $_SESSION['customer'] . "' AND
      EXTRACT(year FROM EntryDate) IN (2014, 2013)
GROUP BY TO_CHAR(o.OrdDate, 'YYYY-MM');

注意,在使用to_char()之前,不需要截断日期。

编辑:

如果需要多个列,只需使用条件聚合即可。不过,我仍会坚持几个月的数字:

代码语言:javascript
复制
SELECT TO_CHAR(o.OrdDate, 'MM'),
       SUM(case when EXTRACT(year FROM EntryDate) = 2013 then 1 else 0 end) as val_2013,
       SUM(case when EXTRACT(year FROM EntryDate) = 2014 then 1 else 0 end) as val_2014
FROM Orders o
WHERE o.CusNo = '" . $_SESSION['customer'] . "' AND
      EXTRACT(year FROM EntryDate) IN (2014, 2013)
GROUP BY TO_CHAR(o.OrdDate, 'MM');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25723753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档