데이타1 데이타2 데이타3 ========================== 바 10 나 2 아 7 가 2 다 5 라 9 아 4 사 1 요런식으로 있다면, order by 를 통해서 데이타1 데이타2 데이타3 ========================== 나 2 다 5 사 1 아 7 가 2 라 9 바 10 아 4 즉, 데이타2, 데이타3 종류별로 묶고, 그에 대한 데이타1 를 가나다 순으로 정렬하고 싶습니다.
비어있는 값을 NULL이라고 가정했습니다.
정렬을 위해서 쿼리 시에 가공의 컬럼을 하나 만듭니다.
이러면 끝!!
SELECT 데이터1, 데이터2, 테이터3
FROM (
SELECT
데이터1
, 데이터2
, 데이터3
, CASE WHEN 데이터2 IS NULL THEN 2
WHEN 데이터3 IS NULL THEN 1 END as 정렬
FROM 테이블1
) AS t
ORDER BY t.정렬, t.데이터1
답변 감사드립니다. ^^ 왕초보라 답을 다 주셔도 실제로 적용시키는 것도 힘드네요 ㅠㅠ 여기서 테이블1 은 무엇을 의미하나요? 그리고, null 값에 데이타2 에는 2 를, 데이타3 에는 1를 넣어주는 건가요? 쿼리문 구조가, select 데이타1, 데이타2, 데이타3, A from #table where A is null union select '', 0,0 union select 데이타1, 데이타2, 데이타3, A form #table where A is not null 이런식으로 되어 있습니다. 말씀해주신대로 적용을 시키려면, 컬럼을 추가시킨 테이블을 하나 더 만들어 놓고, select ( 데이타1, 데이타2, 데이타3, case문) as #table2 로 해 놓고, 원본 쿼리문에서 left outer join 하면 될까요? 아니면 union 을 한번 더 하는 것이 좋을까요?
안녕하세요!
도적님의 글을 제가 대신 추가 답변 드려도 되는지 모르겠네요.
제가 볼때는 도적님께서 설명하신 테이블1은
님께서 질문하신 원천 테이블을 말하시는거구요.
말 그대로 '쿼리 시에 가공의 컬럼'은
실제 테이블 필드의 값이 아니라
쿼리후 결과 정렬을 위한 임시 값이죠.
일부러 그 값도 구분 가능토록 'as 정렬'이라고 표시하셨네요.
그러므로 질문하신 'null 값에 데이타2 에는 2 를, 데이타3 에는 1를 넣어주는 건가요?'
는 잘못된 질문이신거죠.
그리고 도적님께서 아주 적절하게 쿼리를 만들어주신 듯 한데,
테이블을 한개 또 추가해서 union을 과용해서 쓰시면 효율도 떨어지고
쿼리문도 복잡해 보일것 같아 nsh님의 두번째 질문은 적당치 않아 보이네요.
어떻게 적절한 답변이 되었는지 모르겠네요.
주제 넘게 끼어 들었다고 타박하지 않으셨으면 합니다.
그럼 수고하시고 즐건 하루 되세요! ^0^