在Oracle查询中需要帮助

时间:2015-01-02 08:03:04

标签: sql oracle

我有一个要求,从前端(JSP)

  1. 如果选择市场,映射到市场的行业必须填充
  2. 同样,根据所选的行业价值,终端设备必须 填充。
  3.   

    市场 - 第1次下降

         

    Sector --2nd下拉

         

    Webcategory - 第3次下拉

    所以最初获取此页面会有数据库命中, 所以作为oracle DB开发人员,我必须发送包含此映射的OUT参数。

    终端设备映射到扇区并映射到市场。

    我使用的是以下查询,但未按要求提供我的结果。

    SELECT C.MARKET_SEGMENT_NAME,
           C.MARKET_SEGMENT_ID,
           B.SECTOR_NAME,
           B.SECTOR_ID,
           A.WEB_CATEGORY_NAME,
           A.WEB_CATEGORY_ID
    FROM   MSE_WEB_CATEGORY_MASTER A,
           MSE_SECTOR_MASTER B,
           MSE_MARKET_SEGMENT_MASTER C
    WHERE  C.MARKET_SEGMENT_ID = B.FK_MARKET_SEGMENT_ID
           AND B.SECTOR_ID = A.FK_SECTOR_ID(+);
    

    输出:

    MARKET_SEGMENT_NAME MARKET_SEGMENT_ID   Sector   Sector_id  WEB_cate    Web_category_id
    GOOGLE              90                  Slawn    1          FLIPKART    1
    BING                100                 Clown    2          SNAPDEAL    2
    YAHOO               110                 VERICON  4          AMAZON      3
    YAHOO               110                 VERICON  4          E-KART      4
    YAHOO               110                 QUALCOMM 3  
    

    预期输出:

    MARKET_SEGMENT_NAME-MARKET_SEGMENT_ID-SECTOR_NAME-SECTOR_ID-WEB_CATEGORY_NAME-WEB_CATEGORY_ID
    GOOGLE-90-Slawn-1-FLIPKART-1
    BING-100-Clown-2-SNAPDEAL-2
    YAHOO-110-VERICON-4-AMAZON-3
    YAHOO-110-VERICON-4-E-KART-4
    YAHOO-110-QUALCOMM-3
    

    这样我就可以从我的程序中将此组合作为输出参数发送。 由于在JSP /表示层中没有DB查询的限制,所以一切都在DB层上完成。

1 个答案:

答案 0 :(得分:2)

我同意@Ben。您的查询似乎返回所需的数据。将值连接到以虚线分隔的字符串是显示层的任务。

话虽如此,这是一个满足您要求的解决方案。 ||是连接运算符。 NVL2()函数处理外连接列,并在它们空白时禁止破折号。

SELECT C.MARKET_SEGMENT_NAME
       ||'-'||C.MARKET_SEGMENT_ID
       ||'-'||B.SECTOR_NAME
       ||'-'||B.SECTOR_ID
       ||nvl2(A.WEB_CATEGORY_NAME,'-'||A.WEB_CATEGORY_NAME,null)
       ||nvl2(A.WEB_CATEGORY_ID,'-'||A.WEB_CATEGORY_ID,null) concat_str
FROM   MSE_WEB_CATEGORY_MASTER A,
       MSE_SECTOR_MASTER B,
       MSE_MARKET_SEGMENT_MASTER C
WHERE  C.MARKET_SEGMENT_ID = B.FK_MARKET_SEGMENT_ID
       AND B.SECTOR_ID = A.FK_SECTOR_ID(+);