실제로 MS SQL Server에서 내 결과에 일부 복제본을 만드는 방법을 찾고 있습니다. 일반적으로 중복을 만들지 않는 방법을 찾고 있지만이 예제에서는 반환되는 모든 개별 행이 필요하다는 것을 알고 있습니다.여러 결과가 포함 된 사례 식
저는 약 1,000 만 개의 행과 33 개의 열이있는 테이블로 작업하고 있습니다. 테이블은 첫 번째 열의 ID로 구성되며 나머지 열에는 'Y'또는 'NULL'이 있습니다. 대다수의 열은 NULL입니다.
천만 행 중 8 백만 개가 행당 하나의 'Y'개만 있고 나머지 2 백만 행에는 'Y'가 한 개 이상있는 행이 있습니다.
단일 'Y'가있는 행의 경우 기본 표현식은 결과의 단일 열을 만들기 위해 완벽하게 작동합니다.
내 문제는 여기에 있습니다. 두 행이 필요합니다. 한 행에 둘 이상의 'Y'가있는 경우 각 'Y'에 하나씩 필요합니다.
다음은 확인되지 않은 작은 샘플입니다.
ID FLAG1 FLAG2 FLAG3 FLAG4 FLAG5
188 NULL NULL NULL NULL NULL
194 Y NULL NULL NULL NULL
200 Y NULL NULL NULL Y
이와 같은 사례 식을 사용하려고합니다.
Select
ID
,Case
When [FLAG1] = 'Y'
Then 'FLAG1'
When [FLAG2] = 'Y'
Then 'FLAG2'
End as 'Service_Line'
내가 원하는 것은이 모양의 결과입니다.
ID Service_Line
194 FLAG1
200 FLAG1
200 FLAG5
제 문제는 사례식이 첫 번째 결과 만 반환하므로이 문제가 끝납니다.
ID Service_Line
194 FLAG1
200 FLAG1
는 CASE 표현식 내가 달성하기 위해 노력하고 아니면 내가 다른 방법으로 이것에 대해 이동하는 것을 시도해야한다 무엇에 적합한가요?
어떤 DB 시스템 (MySQL, PostgreSQL, Oracle, MS SQL Server 등)을 사용하고 있습니까? 이것은 우아한 방식으로 이런 문제를 해결하는 데 사용할 수있는 기능에 차이를 만들 수 있습니다. – IMSoP
질문을 편집하고 사용중인 데이터베이스를 지정하십시오. –
RDBMS가 UNPIVOT을 지원하는지 확인하십시오. –