[SQL] SQL에서 두 행을 병합
SQLSQL에서 두 행을 병합
나는 다음과 같은 정보를 포함하는 테이블이 있습니다 가정 :
FK | Field1 | Field2
=====================
3 | ABC | *NULL*
3 | *NULL* | DEF
다음을 얻기 위해 나는 테이블에 선택을 수행 할 수있는 방법이
FK | Field1 | Field2
=====================
3 | ABC | DEF
감사
편집 : 명확성을 위해 수정 FIELD2 이름
해결법
-
==============================
1.집계 함수는 여기에 당신을 도울 수 있습니다. 집계 함수는 (SQL Server Express에 2008 R2에서 테스트)이 같은 쿼리를 사용할 수 있도록, (적어도 그 SQL 서버, 오라클, 그리고 제트 / 액세스에 사실) 널 (null)을 무시 :
집계 함수는 여기에 당신을 도울 수 있습니다. 집계 함수는 (SQL Server Express에 2008 R2에서 테스트)이 같은 쿼리를 사용할 수 있도록, (적어도 그 SQL 서버, 오라클, 그리고 제트 / 액세스에 사실) 널 (null)을 무시 :
SELECT FK, MAX(Field1) AS Field1, MAX(Field2) AS Field2 FROM table1 GROUP BY FK;
나는 MAX를 사용하지만 행은 GROUP BY 중 하나 개의 값을 선택합니다 모든 집계가 작동합니다.
테스트 데이터 :
CREATE TABLE table1 (FK int, Field1 varchar(10), Field2 varchar(10)); INSERT INTO table1 VALUES (3, 'ABC', NULL); INSERT INTO table1 VALUES (3, NULL, 'DEF'); INSERT INTO table1 VALUES (4, 'GHI', NULL); INSERT INTO table1 VALUES (4, 'JKL', 'MNO'); INSERT INTO table1 VALUES (4, NULL, 'PQR');
결과 :
FK Field1 Field2 -- ------ ------ 3 ABC DEF 4 JKL PQR
-
==============================
2.거기 포함되지 않은 몇 가지 데이터 규칙에 따라 몇 가지 방법이 있지만, 여기 당신이 준 것을 사용하는 하나의 방법이다.
거기 포함되지 않은 몇 가지 데이터 규칙에 따라 몇 가지 방법이 있지만, 여기 당신이 준 것을 사용하는 하나의 방법이다.
SELECT t1.Field1, t2.Field2 FROM Table1 t1 LEFT JOIN Table1 t2 ON t1.FK = t2.FK AND t2.Field1 IS NULL
또 다른 방법:
SELECT t1.Field1, (SELECT Field2 FROM Table2 t2 WHERE t2.FK = t1.FK AND Field1 IS NULL) AS Field2 FROM Table1 t1
-
==============================
3.나는 비슷한 문제가 있었다. 차이가 나는 내가 간단 명확 아니라 긴 쿼리 결국 수 있도록 반환 있었는지를 통해 훨씬 더 제어 할 필요가 있다고했다. 여기에 귀하의 예에 따라 그것의 단순화 된 버전입니다.
나는 비슷한 문제가 있었다. 차이가 나는 내가 간단 명확 아니라 긴 쿼리 결국 수 있도록 반환 있었는지를 통해 훨씬 더 제어 할 필요가 있다고했다. 여기에 귀하의 예에 따라 그것의 단순화 된 버전입니다.
select main.id, Field1_Q.Field1, Field2_Q.Field2 from ( select distinct id from Table1 )as main left outer join ( select id, max(Field1) from Table1 where Field1 is not null group by id ) as Field1_Q on main.id = Field1_Q.id left outer join ( select id, max(Field2) from Table1 where Field2 is not null group by id ) as Field2_Q on main.id = Field2_Q.id ;
여기 트릭 먼저 디스플레이 '주'선택을 행을 선택한다는 것이다. 그럼 당신은 하나의 필드 당을 선택합니다. 무엇에 결합되는 것은 '주'쿼리에 의해 반환 된 같은 값을 모두해야한다.
경고, 그 다른 쿼리는 ID 당 하나의 행을 반환해야하거나 데이터를 무시 될 것이다
-
==============================
4.이 깔끔한 방법이 될 수 있지만 다음과 같은 하나 개의 방법이 될 수있다 :
이 깔끔한 방법이 될 수 있지만 다음과 같은 하나 개의 방법이 될 수있다 :
SELECT t.fk, ( SELECT t1.Field1 FROM `table` t1 WHERE t1.fk = t.fk AND t1.Field1 IS NOT NULL LIMIT 1 ) Field1, ( SELECT t2.Field2 FROM `table` t2 WHERE t2.fk = t.fk AND t2.Field2 IS NOT NULL LIMIT 1 ) Field2 FROM `table` t WHERE t.fk = 3 GROUP BY t.fk;
테스트 케이스 :
CREATE TABLE `table` (fk int, Field1 varchar(10), Field2 varchar(10)); INSERT INTO `table` VALUES (3, 'ABC', NULL); INSERT INTO `table` VALUES (3, NULL, 'DEF'); INSERT INTO `table` VALUES (4, 'GHI', NULL); INSERT INTO `table` VALUES (4, NULL, 'JKL'); INSERT INTO `table` VALUES (5, NULL, 'MNO');
결과:
+------+--------+--------+ | fk | Field1 | Field2 | +------+--------+--------+ | 3 | ABC | DEF | +------+--------+--------+ 1 row in set (0.01 sec)
를 Where t.fk = 3 절없이 동일한 쿼리를 실행하면, 다음과 같은 결과 집합을 반환합니다 :
+------+--------+--------+ | fk | Field1 | Field2 | +------+--------+--------+ | 3 | ABC | DEF | | 4 | GHI | JKL | | 5 | NULL | MNO | +------+--------+--------+ 3 rows in set (0.01 sec)
-
==============================
5.한 행은 필드 1 열 및 다른 행에 값이있는 경우는 null 값이 쿼리 힘의 일이.
한 행은 필드 1 열 및 다른 행에 값이있는 경우는 null 값이 쿼리 힘의 일이.
SELECT FK, MAX(Field1) as Field1, MAX(Field2) as Field2 FROM ( select FK,ISNULL(Field1,'') as Field1,ISNULL(Field2,'') as Field2 from table1 ) tbl GROUP BY FK
-
==============================
6.내 경우에는 내가이 같은 테이블이 있습니다
내 경우에는 내가이 같은 테이블이 있습니다
--------------------------------------------- |company_name|company_ID|CA | WA | --------------------------------------------- |Costco | 1 |NULL | 2 | --------------------------------------------- |Costco | 1 |3 |Null | ---------------------------------------------
그리고 나는 그것이 아래와 같이 할 것을 권장합니다
--------------------------------------------- |company_name|company_ID|CA | WA | --------------------------------------------- |Costco | 1 |3 | 2 | ---------------------------------------------
대부분의 코드는 거의 동일합니다 :
SELECT FK, MAX(CA) AS CA, MAX(WA) AS WA FROM table1 GROUP BY company_name,company_ID
당신이 그것으로 두 개의 열 이름을 넣어 경우 유일한 차이점은 그룹화 쌍의 수,에 의해 그룹입니다.
from https://stackoverflow.com/questions/2941116/merge-two-rows-in-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] WHERE NULL이 절은 SQL Server 매개 변수 값에 따라 NULL 또는 NO가 없습니다 (0) | 2020.06.06 |
---|---|
[SQL] 오라클 SQL : 다른 삽입 존재 업데이트하는 경우 [중복] (0) | 2020.06.05 |
[SQL] 연결 풀링을 사용하는 동안 방법, 물리적으로 가까이에도록 SqlConnection을 강제로? (0) | 2020.06.05 |
[SQL] 자바 JDBC 연결 상태 (0) | 2020.06.05 |
[SQL] pgAdmin에서 ER 다이어그램을 작성 [폐쇄] (0) | 2020.06.05 |