如何使用子查询和wm_concat对Oracle SQL中的数据进行排序

时间:2015-04-28 07:47:46

标签: sql oracle oracle10g subquery

下面是一个更大查询的子查询,我想要做的是按SL_DT降序排序最后5个文档。

我总是得到错误,右括号丢失,我也考虑使用row_number() over (order by pa.last_modified_date desc),但它不起作用。

SELECT   REPLACE (
              wm_concat(   SL_TXN_CODE
                        || ' - '
                        || SL_NO
                        || '('
                        || SL_DT
                        || ') - '
                        || SUM (SL_QTY)),
              ',',
              ' ,'
           )
    FROM   STK_LEDGER
   WHERE   ROWNUM <= 5
           AND SL_ITEM_CODE =
                 (SELECT   IDH_ITEM_CODE
                    FROM   AA_ITEM_DEFINATION_HEAD
                   WHERE   IDH_SUPP_BC_1 = '111' OR IDH_ITEM_CODE = '111')
           AND SL_TXN_TYPE IN ('SARTN', 'GRN', 'LTRFI')
           AND SL_LOCN_CODE NOT IN ('D2', 'D4', 'D5')
GROUP BY   SL_TXN_CODE, SL_NO, SL_DT
ORDER BY   SL_DT DESC

请建议以降序排序SL_DT并获取5条记录的最佳方法。如您所见,我需要在一个字段中包含所有数据。

数据库是Oracle 10g。

提前致谢。

1 个答案:

答案 0 :(得分:0)

SELECT VALUE
  FROM (SELECT VALUE, ROWNUM AS ROW_NUM
          FROM (SELECT REPLACE(WM_CONCAT(SL_TXN_CODE || ' - ' || SL_NO || '(' ||
                                         SL_DT || ') - ' || SUM(SL_QTY)),
                               ',',
                               ' ,') AS VALUE
                  FROM STK_LEDGER
                 WHERE SL_ITEM_CODE =
                       (SELECT IDH_ITEM_CODE
                          FROM AA_ITEM_DEFINATION_HEAD
                         WHERE IDH_SUPP_BC_1 = '111'
                            OR IDH_ITEM_CODE = '111')
                   AND SL_TXN_TYPE IN ('SARTN', 'GRN', 'LTRFI')
                   AND SL_LOCN_CODE NOT IN ('D2', 'D4', 'D5')
                 GROUP BY SL_TXN_CODE, SL_NO, SL_DT
                 ORDER BY SL_DT DESC))
 WHERE ROW_NUM <= 5