2013-05-11 3 views
1

내가 SQL 쿼리에 새로 온 사람과 열의 첫 번째 값을 대체, 나는 다음과 같은 열을 선택하기 위해 노력하고있어 :SQL이 두 번째 값

pm_name, 파티, yr_comm 및 yr_left을.

나는 처음 세 개의 열에 데이터가 있고, yr_left를 생성하기 위해 yr_comm에 별칭을 지정했습니다.

내가 yr_left의 첫 번째 값을 건너 뛰려면 SELECT 한 Statment에 하위 쿼리를 사용하여 시도했지만, 나는 부질 반환에게 1 개 이상의 행을 말하는 오류를 입수했습니다

SELECT pm_name, party, yr_comm, 
(SELECT yr_comm FROM ministry WHERE yr_comm <> "1901") AS yr_left 
FROM ministry 
WHERE party <> "Labor" 

내가해야 할 일은 yr_left 1901의 첫 번째 값을 1903으로 바꾸지 만 첫 번째 행의 나머지를 유지하고 1904 intp 두 번째 등을 넣고 yr_left의 맨 아래 행에 널 값을 지정합니다.

Screenshot

는이 작업을 수행하는 것이 가능하고, 어떤 문은 같이해야합니까?

+2

환영에 StackOverflow에! 샘플 데이터를 게시하고 (이에 대한 답을 편집 할 수 있습니까?) 원하는 결과물을 기반으로 게시 할 수 있습니까? 어떤 RDBMS를 사용하고 있습니까 (MySQL, SQL Server, Oracle ...)? – peterm

답변

0

는 데이터베이스 시스템이 허용하는 구문에 따라,이

WITH mtable AS (
    SELECT pm_name, party, yr_comm, rownum 
    FROM ministry WHERE party <> "Labor" ORDER BY yr_comm 
) SELECT m.pm_name, m.party, m.yr_comm, (
    SELECT mm.yr_comm FROM mtable mm WHERE mm.rownum = m.rownum + 1 
) AS yr_left 
    FROM mtable m 
+0

이것은 사역 테이블의 행이 항상 시간순으로 정렬되어야한다고 가정합니다. 그것이 항상 안전한 가정 일 것이라는 것을 확신 할 수는 없습니다. 하지만 그걸 해결할 수있을거야, 응? ;-) – WarrenT

+0

좋은 관찰 친구. 스냅 샷의 질의 결과는 순서대로 처리되므로 공격하지 않았습니다. 하지만 당신이 말했듯이, 나는 좋은 가정이 아니므로'주문서 '를 넣었습니다. 감사. –

+0

나는 너를 알았다 ;-) – WarrenT

0

이이 작동 해보십시오 :

SELECT m.pm_name, m.party, m.yr_comm, 
     (SELECT min(x.yr_comm) 
      FROM ministry as x 
      WHERE x.yr_comm > m.yr_comm 
     ) as yr_left 
    FROM ministry as m 
    ORDER by m.yr_comm 
+0

안녕하세요, 도움을 주셔서 감사합니다. 내가 찾던 결과를 얻었습니다. 다시 한 번 감사드립니다 – user2371802

+0

@ user2371802 그의 대답을 수락 해 주셔서 감사합니다. 다른 사람들이 당신을 도우려는 노력에 감사하고 싶다면 투표를하십시오. 오해의 소지가있는 답변을 발견하면 아래로 투표하십시오. 그것이 SO가 작동하는 방식입니다. (글자, 요약하면 :) –

+0

@ user2371802 좋은 질문이나 도움을 얻기위한 점수를 얻기 위해 여기에 계정을 만들 수 있습니다.이 모두가 커뮤니티에 기여하고 우리 모두에게 더 나은 리소스를 제공합니다. – WarrenT

관련 문제