我是SQL的新手。我目前正在开发一个 Oracle数据库,并且我已经创建了一个根据日期范围参数提取数据的报告。
代码如下:
SELECT
DISTINCT C.CUSTOMER_CODE
, MS.SALESMAN_NAME
, SUM(C.REVENUE_AMT) Rev_Amt
FROM
C_REVENUE_ANALYSIS C
, M_CUSTOMER_H MC
, M_SALESMAN MS
WHERE C.COMPANY_CODE = 'W1'
AND C.CUSTOMER_CODE = MC.CUSTOMER_CODE
AND MC.SALESMAN_CODE = MS.SALESMAN_CODE
AND trunc(C.REVENUE_DATE) between to_date(<STARTDATE>,'YYYYMMDD') and to_date(<ENDDATE>,'YYYYMMDD')
AND MS.COMPANY_CODE = '00'
GROUP BY C.CUSTOMER_CODE, MS.SALESMAN_NAME
ORDER BY C.CUSTOMER_CODE, MS.SALESMAN_NAME
日期范围从1月1日到4月30日的结果报告是:
+-----------+--------------+--------------+
|Customer |Salesman Name |Revenue Amount|
+-----------+--------------+--------------+
|Customer 1 |Salesman 1 | 5000.00|
+-----------+--------------+--------------+
|Customer 2 |Salesman 1 | 8000.00|
+-----------+--------------+--------------+
|Customer 3 |Salesman 2 | 300.00|
+-----------+--------------+--------------+
|Customer 4 |Salesman 3 | 600.00|
+-----------+--------------+--------------+
|Customer 5 |Salesman 3 | 5000.00|
+-----------+--------------+--------------+
|Customer 6 |Salesman 3 | 8000.00|
+-----------+--------------+--------------+
|Customer 7 |Salesman 4 | 9000.00|
+-----------+--------------+--------------+
|Customer 8 |Salesman 5 | 2000.00|
+-----------+--------------+--------------+
|Customer 9 |Salesman 6 | 1000.00|
+-----------+--------------+--------------+
|Customer10 |Salesman 6 | 5000.00|
+-----------+--------------+--------------+
|Customer11 |Salesman 7 | 6000.00|
+-----------+--------------+--------------+
|Customer12 |Salesman 8 | 8000.00|
+-----------+--------------+--------------+
我需要在1月到4月之间显示每个销售员每个月的收入分配。
所以我希望结果如下:
+-----------+--------------+-----------+-----------+-----------+-----------+-------------+
|Customer |Salesman Name |Rev for Jan|Rev for Feb|Rev for Mar|Rev for Apr|Total Rev Amt|
+-----------+--------------+-----------+-----------+-----------+-----------+-------------+
|Customer 1 |Salesman 1 | 1000.00| 1000.00| 1000.00| 2000.00| 5000.00|
+-----------+--------------+-----------+-----------+-----------+-----------+-------------+
|Customer 2 |Salesman 1 | 2000.00| 2000.00| 2000.00| 2000.00| 8000.00|
+-----------+--------------+-----------+-----------+-----------+-----------+-------------+
|Customer 3 |Salesman 2 | 100.00| 0.00| 100.00| 100.00| 300.00|
+-----------+--------------+-----------+-----------+-----------+-----------+-------------+
|Customer 4 |Salesman 3 | 100.00| 200.00| 100.00| 200.00| 600.00|
+-----------+--------------+-----------+-----------+-----------+-----------+-------------+
|Customer 5 |Salesman 3 | 1000.00| 2000.00| 1000.00| 1000.00| 5000.00|
+-----------+--------------+-----------+-----------+-----------+-----------+-------------+
|Customer 6 |Salesman 3 | 1000.00| 2000.00| 1000.00| 4000.00| 8000.00|
+-----------+--------------+-----------+-----------+-----------+-----------+-------------+
|Customer 7 |Salesman 4 | 2000.00| 2000.00| 3000.00| 2000.00| 9000.00|
+-----------+--------------+-----------+-----------+-----------+-----------+-------------+
|Customer 8 |Salesman 5 | 500.00| 400.00| 500.00| 600.00| 2000.00|
+-----------+--------------+-----------+-----------+-----------+-----------+-------------+
|Customer 9 |Salesman 6 | 200.00| 200.00| 200.00| 400.00| 1000.00|
+-----------+--------------+-----------+-----------+-----------+-----------+-------------+
|Customer10 |Salesman 6 | 1000.00| 1000.00| 2000.00| 1000.00| 5000.00|
+-----------+--------------+-----------+-----------+-----------+-----------+-------------+
|Customer11 |Salesman 7 | 2000.00| 2000.00| 1000.00| 1000.00| 6000.00|
+-----------+--------------+-----------+-----------+-----------+-----------+-------------+
|Customer12 |Salesman 8 | 2000.00| 2000.00| 2000.00| 2000.00| 8000.00|
+-----------+--------------+-----------+-----------+-----------+-----------+-------------+
现在,挑战:
列数需要根据日期范围而变化。例如;选择1月到4月时,我应该获得4列收入加1列总收入。如果选择去年十月到今年四月,我应该获得7列收入加1列总收入。
答案 0 :(得分:0)
您必须在select&amp; amp;中添加截断(C.REVENUE_DATE,&#39; MM&#39;)通过...分组。那么你的结果就是列式的。然后你必须按照你所示的方式进行转动。
variable = userInputOfSorts()
puts JSON.pretty_generate(variable) # Prints expected output, array with 2 values
variable = [*variable]
puts variable # nil