programing

Oracle에서 A,B 형식의 두 열 데이터를 검색하는 방법

testmans 2023. 10. 17. 20:07
반응형

Oracle에서 A,B 형식의 두 열 데이터를 검색하는 방법

오라클 데이터베이스에 두 개의 열이 있습니다.

+---------+---------+
| Column1 | Column2 |
+---------+---------+
| A       | 1       |
| A       | 2       |
+---------+---------+

결과적으로 데이터를 얻는 것처럼 데이터를 폐기하고 싶습니다.

+---------+---------+
| Column1 | Column2 |
+---------+---------+  
| A       | 1,2     |
+---------+---------+

해결책을 제시해 주시기 바랍니다.

팀 홀은 오라클의 문자열 집계 기법에 대해 상당히 표준적인 목록을 가지고 있습니다.

사용하는 기술은 Oracle 버전과 순수 SQL 솔루션을 찾고 있는지 여부 등 여러 가지 요소에 따라 달라집니다.Oracle 11.2를 사용하는 경우 다음을 사용하는 것이 좋습니다.LISTAGG

SELECT column1, listagg( column2, ',' ) WITHIN GROUP( order by column2 )
  FROM table_name
 GROUP BY column1

이전 버전의 Oracle을 사용하는 경우 순수 SQL 솔루션이 필요하지 않다고 가정하면 일반적으로 사용자 정의 Aggregate 함수 접근 방식을 사용하는 것이 좋습니다.

위의 모든 답변이 맞으며 작은 문제를 해결하기 위해 한 가지 사례를 추가하고자 합니다.나같은 경우에는my_column1활자는nvarchar2하지만 텍스트는number벨로우 코드가 작동하지 않고 공백만 표시합니다.

select group_id, listagg( t.my_column1 || '-' || to_char(t.doc_date,'dd.mm.yyyy') ||  ' ') within group(order by doc_date) 
 from my_table t
 group by group_id

제가 이렇게 썼을 때 효과가 있어요.

select group_id, listagg( to_char(t.my_column1) || '-' || to_char(t.doc_date,'dd.mm.yyyy') ||  ' ') within group(order by doc_date) 
 from my_table t
 group by group_id

제 피드백이 누군가의 시간을 절약할 수 있기를 바랍니다.

만약 10g을 가지고 있다면, 아래의 기능을 거쳐야 합니다.

CREATE OR REPLACE FUNCTION get_comma_separated_value (input_val  in  number)
  RETURN VARCHAR2
IS
  return_text  VARCHAR2(10000) := NULL;
BEGIN
  FOR x IN (SELECT col2 FROM table_name WHERE col1 = input_val) LOOP
    return_text := return_text || ',' || x.col2 ;
  END LOOP;
  RETURN LTRIM(return_text, ',');
END;
/

따라서 다음과 같은 작업을 수행할 수 있습니다.

select col1, get_comma_separated_value(col1) from table_name

여기를 만지작거리세요.

oracle 11g이 있는 경우 listagg를 사용할 수 있습니다.

SELECT 
    col1,
    LISTAGG(col2, ', ') WITHIN GROUP (ORDER BY col2) "names"
FROM table_x
GROUP BY col1

여기서 Listagg를 만지작거리세요.

mysql의 경우, 간단할 것입니다.

SELECT col1, GROUP_CONCAT(col2) FROM table_name GROUP BY col1

Oracle 버전 10에서는 다음과 같은 작업을 수행합니다.

SELECT column1, wm_concat( column2)
  FROM table_name
 GROUP BY column1

언급URL : https://stackoverflow.com/questions/12145379/how-to-retrieve-two-columns-data-in-a-b-format-in-oracle

반응형