2016-06-14 2 views
0

У меня есть стол с двумя столбцами и меткой.ORACLE: возвращаемые значения с запятой

Label      Location 
--------------------------------------- 
OLR-2873-SSA/GTA    GTA 

OLR-2873-SSA/GTA    GTA 

OLR-2873-SSA/POW    POW 

OLR-2873-SSA/POWGTA   POWGTA 

Я хочу выход быть как

Lable              Location 
----------------------------------------------------------------------- 
OLR-2873-SSA/GTA,OLR-2873-SSA/POW,OLR-2873-SSA/POWGTA  GTA,POW,POWGTA 

Я хочу использовать регулярные выражения и получить он вывод.

Я попытался

Select 
dbms_lob.substr(ltrim(REGEXP_REPLACE(REPLACE(
     REPLACE(
      XMLAGG(
      XMLELEMENT("A",label) 
       ORDER BY label).getClobVal(), 
      '<A>',','), 
      '</A>',''),'([^,]+)(,\1)+', '\1'), 
        ','),4000,1) label , dbms_lob.substr(ltrim(REGEXP_REPLACE(REPLACE(
     REPLACE(
      XMLAGG(
      XMLELEMENT("A",location) 
       ORDER BY location).getClobVal(), 
      '<A>',','), 
      '</A>',''),'([^,]+)(,\1)+', '\1'), 
        ','),4000,1) LOCATION from table_name. 

Но я получаю выход как этот

Label         Location 
---------------- 
OLR-2873-SSA/GTA,OLR-2873-SSA/POWGTA GTA,POWGTA 

ответ

0

Microsoft SQL версии

DECLARE @Table AS TABLE (Label VARCHAR(25), Location VARCHAR(25)) 

INSERT INTO @Table (Label, Location) VALUES ('OLR-2873-SSA/GTA','GTA') 
    ,('OLR-2873-SSA/GTA','GTA') 
    ,('OLR-2873-SSA/POW','POW') 
    ,('OLR-2873-SSA/POWGTA','POWGTA') 

SELECT 
    Label = STUFF(
     (SELECT ',' + Label 
     FROM 
      @Table t 
     FOR XML PATH('')) 
     ,1,1,'') 
    ,Location = STUFF(
     (SELECT ',' + Location 
     FROM 
      @Table t 
     FOR XML PATH('')) 
     ,1,1,'') 

В основном вы, кажется, ищет конкатенации строк в строках , есть несколько способов, если вы посмотрите вокруг Интернета. Один из способов, которыми я пользуюсь, - преобразовать строки в строку xml с запятой, предваряющей значение, и без имени столбца, а затем использовать материал, чтобы убрать первую запятую. Таким образом, FOR XML PATH('') в основном означает отсутствие корневого элемента, а потому, что нет имени столбца, вы не получите других тегов xml, например. нет <label></label>. Добавляя разделитель к значению столбца, у вас теперь есть длинная разделительная строка, которую вам просто нужно избавиться от первого ненужного разделителя.

+0

Я хочу, чтобы ответ в Oracle. –

+0

Ahhh Я вижу тег теперь, возможно, уточнение в вопросе было бы хорошо. Я оставлю его на случай, если кто-то ищет версию MS. – Matt

0

попробовать это

WITH TEST_DATA AS (
    SELECT 'OLR-2873-SSA/GTA' AS LABEL, 'GTA' AS LOCATION FROM DUAL 
    UNION ALL 
    SELECT 'OLR-2873-SSA/GTA' AS LABEL, 'GTA' AS LOCATION FROM DUAL 
    UNION ALL 
    SELECT 'OLR-2873-SSA/POW' AS LABEL, 'POW' AS LOCATION FROM DUAL 
    UNION ALL 
    SELECT 'OLR-2873-SSA/POWGTA' AS LABEL, 'POWGTA' AS LOCATION FROM DUAL 
) 
SELECT 
    LISTAGG(CASE LABEL_DISTINCT WHEN 1 THEN LABEL END, ',') WITHIN GROUP(ORDER BY 0) AS LABEL, 
    LISTAGG(CASE LOCATION_DISTINCT WHEN 1 THEN LOCATION END, ',') WITHIN GROUP(ORDER BY 0) AS LOCATION 
FROM (
    SELECT 
     LABEL, 
     ROW_NUMBER() OVER(PARTITION BY LABEL ORDER BY 0) AS LABEL_DISTINCT, 
     LOCATION, 
     ROW_NUMBER() OVER(PARTITION BY LOCATION ORDER BY 0) AS LOCATION_DISTINCT 
    FROM 
     TEST_DATA 
) 

 Смежные вопросы

  • Нет связанных вопросов^_^