我已经开始使用高级图表,并提出了下面的SQL查询来将数据放在图表上。
它显示了客户在本年度每月下订单的数量。
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')问题
目前,我正在使用高图表的结果,如:
oci_execute($result);
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。
提前谢谢。
发布于 2014-09-08 13:40:42
我将使用表别名编写查询:
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子句中修正日期比较:
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()之前,不需要截断日期。
编辑:
如果需要多个列,只需使用条件聚合即可。不过,我仍会坚持几个月的数字:
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');https://stackoverflow.com/questions/25723753
复制相似问题