【发布时间】:2016-01-11 01:22:31
【问题描述】:
如何在交叉表中创建静态列/行?见下面的例子;我可以有一个固定的 jan、feb、march、... 列而不是动态生成吗?
location jan feb mar apr may jun jul aug sep oct nov dec
london 500 62 200 50 0 60 100 46 89 200 150 210
paris 50 26 20 500 50 70 40 200 0 40 250 50
我希望列 (jan, feb, mar, apr, ...) 始终显示,无论它们的度量值是零还是有值。就像它们是固定的一样。
这是我正在使用的查询:
select sum("AMOUNT"), "REQUESTDATE","description"
from(
SELECT SUM(e.AMOUNT)"AMOUNT",TO_CHAR(REQUESTDATE,'MM')"REQUESTDATE", CA.DESCR "description"
FROM PC_PAYMENTTRXNLOG PC,GLB_TYPE ca, PC_ESERVICEINQUIRY e
where PC.ESERVICE_ID = E.ID
AND trunc(REQUESTDATE) between trunc(to_date('2012-01-01','yyyy-mm-dd')) and trunc(to_date('2012-06-30','yyyy-mm-dd'))
GROUP BY TO_CHAR(REQUESTDATE,'MM'),CA.DESCR
)
group by "REQUESTDATE","description"
和输出
SUM("amount") Requestdate Description
2550405 04 A
2550405 04 B
23893281 05 C
614977 06 A
614977 06 E
2550405 04 C
现在将查询更新为
select sum("AMOUNT"), month,"description"
from(
SELECT SUM(e.AMOUNT)"AMOUNT",TO_CHAR(REQUESTDATE,'MM')"REQUESTDATE", CA.DESCR "description"
FROM PC_PAYMENTTRXNLOG PC,GLB_TYPE ca, PC_ESERVICEINQUIRY e
where PC.ESERVICE_ID = E.ID
AND trunc(REQUESTDATE) between trunc(to_date('2012-01-01','yyyy-mm-dd')) and trunc(to_date('2012-06-30','yyyy-mm-dd'))
GROUP BY TO_CHAR(REQUESTDATE,'MM'),CA.DESCR
)
full outer join (select to_char(date '1970-01-01'
+ numtoyminterval(level - 1, 'month'), 'mm') as month
from dual
connect by level <= 12) on month="REQUESTDATE"
group by month,"description"
当运行查询时,它会显示所有月份,无论它们的度量是零还是有值。
但是现在的输出是这样的
location jan feb mar apr may jun jul aug sep oct nov dec
london 500 62 200 50 0 60 100 46 89 200 150 210
paris 50 26 20 500 50 70 40 200 0 40 250 50
null 0 0 0 0 0 0 0 0 0 0 0 0
如何限制/隐藏最后一个空行?
【问题讨论】:
-
在查询本身.. 使用完全外连接和月份。简单
-
你能解释一下吗?
-
你过得怎么样?包括示例查询或附加 sqlfiddle
-
我的查询
select count("NUMBER OF RECEIPT"), sum("AMOUNT"), "REQUESTDATE","description" from (SELECT PC.ID "NUMBER OF RECEIPT", SUM(e.AMOUNT) "AMOUNT", TO_CHAR(REQUEST_TIMESTAMP, 'MM') "REQUESTDATE",CA.DESCR "description" FROM PC_PAYMENTTRXNLOG PC,GLB_TYPE ca, PC_ESERVICEINQUIRY e, where PC.ESERVICE_ID = E.ID AND ca.ID=E.CARDTYPE AND trunc(REQUESTDATE) between trunc(to_date('2012-01-01','yyyy-mm-dd')) and trunc(to_date('2012-06-30','yyyy-mm-dd')) GROUP BY TO_CHAR(REQUEST_TIMESTAMP, 'MM'), PC.ID,CA.DESCR ) group by "REQUESTDATE","description"月份显示如requestdate 06 06 05 05 04 04 -
编辑并将其添加到您的问题中,并添加您正在使用的数据库的标签。和示例 sql 输出或 sqlfiddle。请更清楚。并且永远记住在选择查询中使用别名然后获取记录。
标签: sql oracle jasper-reports crosstab