Quantcast
Channel: SCN: Message List
Viewing all articles
Browse latest Browse all 8798

Re: Concatenating Multiple rows of a column into 1 cell

$
0
0

Hi,

 

I have not found any function to do what you need, but if you've developed a procedure using arrays you do, watch it and tell me if you need.

 

Regards.

 

 

DROP TABLE TBL_TEST;

CREATE TABLE TBL_TEST (STATE nvarchar(100),CITY nvarchar(100));

 

 

INSERT INTO TBL_TEST values ('Arizona' ,'Phoenix');

INSERT INTO TBL_TEST values ('Arizona' ,'Mesa');

INSERT INTO TBL_TEST values ('Arizona' ,'Tempe');

INSERT INTO TBL_TEST values ('x' ,'x');

 

 

 

 

 

 

DROP PROCEDURE CONCATENATE_COLUMN;

 

 

CREATE PROCEDURE CONCATENATE_COLUMN() AS

BEGIN

    DECLARE v_ID integer;

  DECLARE v_STATE nvarchar(100);

  DECLARE v_ACUM_STATE nvarchar(100) ARRAY;

  DECLARE v_CITY nvarchar(100);

  DECLARE v_ACUM_CITY nvarchar(100) ARRAY;

  DECLARE v_LAST_STATE nvarchar(100);

  DECLARE CURSOR c_cursor1 FOR

  SELECT DENSE_RANK() OVER (ORDER BY STATE) as ID,STATE,CITY FROM TBL_TEST;

  

  v_LAST_STATE := '';

 

  FOR R AS c_cursor1 DO

     v_ID := R.ID;

     v_STATE := R.STATE;

     v_CITY := R.CITY;

    

  IF :v_LAST_STATE = '' THEN

  v_LAST_STATE := :v_STATE;

  v_ACUM_CITY[v_ID] := :v_CITY;

  v_ACUM_STATE[v_ID] := :v_STATE;

  ELSEIF :v_LAST_STATE <> :v_STATE THEN

  v_LAST_STATE := v_STATE;

  v_ACUM_CITY[v_ID] := :v_CITY;

  v_ACUM_STATE[v_ID] := :v_STATE;

  ELSE

  v_ACUM_CITY[v_ID] := :v_ACUM_CITY[:v_ID] || ',' || :v_CITY;

  END IF;

 

  END FOR;

 

  CLOSE c_cursor1;

 

  v_table = UNNEST(:v_ACUM_STATE, :v_ACUM_CITY) AS ("STATE", "CITY");

 

  SELECT * FROM :v_table;

END;

 

CALL CONCATENATE_COLUMN;


Viewing all articles
Browse latest Browse all 8798

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>