SQL ID는 같지만 열 값이 다른 두 행 병합(Oracle)
id는 같지만 column 값이 다를 때 다른 행을 하나로 병합하려고 합니다.
예를 들어 다음과 같습니다.
(table1)
id colour
1 red
1 blue
2 green
2 red
결과가 다음과 같이 되도록 이것을 결합했으면 합니다.
id colour1 colour2
1 red blue
2 green red
아니면
id colour
1 red, blue
2 green, red
또는 행이 함께 결합되도록 위의 다른 변형.
어떤 도움이라도 주시면 감사하겠습니다!미리 감사드립니다.
먼저 제 의견을 읽어보세요. 보고 목적이 아니면 이 작업을 수행할 생각조차 하지 않으셔도 됩니다. 그리고 이 작업을 수행하기 위해 보고 도구를 사용하는 올바른 솔루션이 아닌 일반 SQL에서 수행할 수 있는 방법을 알고 싶으실 것입니다.
두 번째 형식이 가장 쉽습니다. 특히 색상이 나타나는 순서에 상관없이 사용할 수 있는 경우에는 더욱 그렇습니다.
select id, listagg(colour, ', ') within group (order by null)
from table1
group by id
order by null
랜덤 순서를 의미합니다.다른 것으로 주문하고 싶다면, 그것을 사용하세요.order by
와 함께listagg()
. 예를 들어, 색상을 알파벳순으로 순서를 정하면 다음과 같이 말할 수 있습니다.within group (order by colour)
.
첫 번째 형식의 경우 열 수에 대한 선험적 제한이 있어야 하며, 사용하는 방법은 사용 중인 Oracle 버전에 따라 다릅니다(여기에 게시하는 모든 질문과 다른 토론 게시판에 항상 포함해야 함).이 개념은 "pivoting"이라고 불리는데, 버전 11 이후 Oracle에는 사용자가 사용할 수 있는 명시적인 피벗 연산자가 있습니다.
다음은 당신이 제안한 두 가지 방법 중 첫 번째 방법으로 당신의 문제를 해결해 줄 것입니다.Listagg
는 두 가지 방법 중 두 번째 방법으로 해결하는 데 사용하는 방법입니다(다른 답변에서 지적된 바와 같이).
select id,
min(decode(rn,1,colour,null)) as colour1,
min(decode(rn,2,colour,null)) as colour2,
min(decode(rn,3,colour,null)) as colour3
from (
select id,
colour,
row_number() over(partition by id order by colour) as rn
from table1
)
group by id;
이 방법에서는 특정 ID에 대해 가능한 최대 색상 수까지 대소문자를 추가해야 합니다(이 솔루션은 동적이 아님).
또한 색상 이름의 알파벳 순서에 따라 색상 1, 색상 2 등에 색상을 입력하는 것입니다.만약 당신이 임의의 주문이나 다른 주문을 선호한다면, 당신은 변경할 필요가 있습니다.order by
.
해봐요, 저한테 효과가 있어요.
여기서student
테이블의 이름이고.studentId
는 열입니다.우리는 모든 과목을 특정 학생에게 병합할 수 있습니다.GROUP_CONCAT
.
SELECT studentId, GROUP_CONCAT(subjects) FROM student
언급URL : https://stackoverflow.com/questions/40831690/sql-merge-two-rows-with-same-id-but-different-column-values-oracle
'programing' 카테고리의 다른 글
WonderPlugin 슬라이더에서 wonderplugin.com 링크를 제거하는 방법 (0) | 2023.09.11 |
---|---|
How to export data to CSV in PowerShell? (0) | 2023.09.11 |
Java + Mysql UTF8 Problem (0) | 2023.09.11 |
Unable to start MariaDB - Ubuntu 18.04 (0) | 2023.09.11 |
"기타" 범주의 지정되지 않은 값을 계산하기 위한 쿼리 (0) | 2023.09.11 |