2013-05-28 5 views
0

한 행을 SQL로 두 개로 분할하는 방법은 무엇입니까?한 행을 두 행으로 나누기

의 내가 열

Name, Time, Model 

을 가지고 있고 나는 그런 'Nick', 1:00, 2010 같은 행이 있다고 가정 해 봅시다. 또한 모델 중 하나를 내가 그런 내가 대신 하나의 행의

'Nick', NULL, 2012 
'Nick', 1:00, 2010 

을해야합니다 있는지 확인하려면 어떻게

2010 또는 2012이 될 수 있습니다. 기본적으로, 내 테이블의 모든 행에 대해 이와 같은 작업을 수행해야합니다.이 섹션에서는 날짜 섹션 아래에 NULL 값이있는 새 행으로 나열되지 않은 모델을 나열합니다.

감사합니다.

+0

샘플 데이터주세요 (예 데이터 형식 너의 상이 할 수있다). 너의 질문에 분명하지 않다. – fancyPants

+0

귀하의 모델은 쉼표로 구분됩니까? –

+0

아마도 테이블의'UNION'을 자체적으로 할 것인가? – cha0site

답변

0
SELECT name, 
     CASE q.id WHEN 1 THEN time END time, 
     CASE q.id WHEN 1 THEN model ELSE '2012' END model 
FROM (
     SELECT 1 
     UNION ALL 
     SELECT 2 
     ) q (id) 
CROSS JOIN 
     mytable 
0

이 방법도 효과적입니다. 필요한 경우 (2011), (2013)과 같은 값 목록에 연도를 더 추가하여 해당 연도의 예상 결과를 얻을 수도 있습니다.

Fiddle example

select name, 
     case when t1.model = t2.year then t1.time end time, 
     year 
from temp t1 
    cross join (values (2010),(2012)) as t2(year) 
order by t2.year desc 

| NAME |  TIME | YEAR | 
-------------------------- 
| Nick | 01:00:00 | 2010 | 
| Nick | (null) | 2012 | 
+0

이것은 좋지만 실제로 cross-join을 사용하기 때문에 성능이 저하되는 것을 볼 수 있습니다. (실제로 더 큰 데이터 세트로 뭔가를하려고합니다.) 나는 나 자신을 위해 그것을 밖으로 시도하고 무슨 일이 일어날지를 짐작할 것이다. – Glassjawed

관련 문제