PGR21.com
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다.
통합 규정을 준수해 주십시오. (2015.12.25.)
Date 2017/03/16 22:27:12
Name eosdtghjl
Subject [질문] SQL 문자열 컬럼에서 이럴경우 어떻게 정렬해야할까요?
DB는 MSSQL입니다.

현재 test 테이블의 varchar형인 a2컬럼에
1팀~15팀까지 있고 그외에 YS팀 QR팀 등의 값이 여러개 중복되어 들어가 있는데요.

중복제거하기위해 distinct를 쓰면
select distinct a2 from test
order by a2 는 정상 출력 됩니다.

근데 이렇게하니까 문제가
10팀~15팀 다음에 1팀~9팀 다음에 QR팀 .. 이런식으로 들어가더라고요.

확인해보니 문제가 2가지가 있습니다.

문제1.
만약에 a2컬럼에 숫자+팀이라는 데이터만 들어가있다면~
varchar형 a2 컬럼에서 [숫자팀을 숫자순서대로 출력]하려면
select a2 from test
order by convert(int,replace(a2,'팀',''))
이렇게하면 됩니다. 그런데! [중복을 제거해서 출력해야되기때문에]

select disctinct a2 from test
order by convert(int,replace(a2,'팀',''))
이렇게하니까
SELECT DISTINCT가 지정된 경우에는 ORDER BY 항목이 SELECT 목록에 나타나야 합니다.
라는 에러가 납니다.

문제2.
처음에 말했듯이 a2컬럼에 숫자+팀말고 문자+팀이라는 데이터도 들어가 있습니다. 그래서
select a2 from test
order by convert(int,replace(a2,'팀',''))
이렇게 하면
varchar 값 'QR '을(를) 데이터 형식 int(으)로 변환하지 못했습니다.
라는 에러가 뜹니다 ㅜㅜ

즉 이렇게도 저렇게도 출력을 못하고 있는상황인데요..

정리해서 말하자면
varchar형인 a2컬럼에 1팀~15팀까지 있고 그외에 YS팀 QR팀 등의 값이 여러개 중복되어 들어가 있다면,
중복제거해서 숫자+팀은 숫자순서대로 출력되게 하려면 쿼리를 어떻게 짜야할까요? 참고로 문자+팀 이란 데이터는 숫자+팀 앞에오든 뒤에오든 상관없습니다.
중요한것은 중복이 제거되야하고, 숫자+팀은 9팀다음에 10팀이 나와야 한다는 것입니다.
감사합니다.

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
양파냥
17/03/16 22:43
수정 아이콘
order by에도 case문 적용이 됩니다.
17/03/17 00:51
수정 아이콘
일단 "팀"을 제거하시고 그냥 1,2,3,QR만 넣으세요. 그리고 나서 그러면 replace는 제거할 수 있을 겁니다. 굳이 int로 하지 않아도 알파벳 순서대로 하면 1,2,3,QR이 될꺼에요.

그리고 distinct를 하는 이유를 알면 좋을 것 같습니다.. 집계를 하거나 할게 아니면 distinct는 앵간하면 불필요합니다. 정규화가 잘못되어 있다는 말이라서요. 전체 스키마를 볼 수 있으면 좀 더 시원한 답변을 드릴 수 있을 것 같네요.
eosdtghjl
17/03/17 09:00
수정 아이콘
아뇨.. 팀을 제거해도 해당 컬럼이 varchar형이라서 8,9 다음에 10이 안오고 14,15 다음에 1,2가 옵니다..ㅜㅜ

distinct 하려는 이유는 웹개발때문입니다. 어떤화면에서 조건 검색을 해야하는데 그럴려면 저 컬럼안에 어떠한 항목들이 있는지 중복제거해서 정렬해서 콤보박스에 보여줘야합니다.

SQL 완전 쌩초보라서 위 댓글의 order by의 case문도 업렵고 아래댓글의 right함수나 group by도 어렵네요..OTL

일단
select a2 from test order by
case when a2 like '%팀' then convert(int,replace(a2,'팀','')) end
이렇게해서 영문+팀 다음에 숫자+팀이 정렬되도록했어요~!

근데 앞에 select distinct a2 로 중복제거하면 여전히
[SELECT DISTINCT가 지정된 경우에는 ORDER BY 항목이 SELECT 목록에 나타나야 합니다.]
라는 에러가 뜨네요 으앙 미쳐 ㅜㅜ
17/03/24 13:27
수정 아이콘
아 이제야 댓글을 봤는데요. 드랍다운 용이라면
테이블을 하나더 만드세요.
여기서는 지금 검색 조건에 팀을 주기위한 드랍다운이잖아요.

그러면 이 결과를 distinct할게 아니라
create table dbo.tbl_team ( teamcode int primary key, teamname nvarchar(100) null)
이런식으로 만들고 저 테이블을 SELECT하는 SP를 그 드랍다운에 바인딩 하시는게 비교도 안되게 효율적입니다.
17/03/24 13:28
수정 아이콘
그리고 두 데이터간 일관성이 많이 중요하면 fk 거시고, 성능이 더 중요하면 걸지 마시구요.
17/03/17 07:49
수정 아이콘
SQL을 만진지 오래되서 가물가물하네요. 숫자로 변환하는 것도 가능하지만 그냥 숫자 앞에 동일하게 0을 붙여서 정렬시키는 것도 가능합니다. 오류 메세지에 의하면,
SELECT distinct a2, RIGHT(CONCAT('00000', a2), 5) as zero_pad_a2 FROM test ORDER BY zero_pad_a2
등과 같이 해서 선택 결과에서 a2만 사용하면 되지 않을까 싶네요. 함수는 DBMS마다 다르니 MSSQL에 맞는 함수로 하시면 되지 않을까 싶네요. 위의 RIGHT(..., 5)의 두번째 인자는 a2의 최대 길이로 맞추면 됩니다. distinct가 잘 안 된다면 group by를 적절하게 쓰셔도 됩니다.
17/03/17 11:45
수정 아이콘
어떤 공부형태로 궁금하신거면 저라면 0을 붙이고 int로 안바꾼다... 즉 자리수 맞추는걸로 하겠습니다.
그런데, 실무라면 a2 컬럼 옆에 a3 만들어서 order sequence (중복 불가, int) 넣어 줄거 같습니다.
order by a3 형태로...
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
99597 [질문] 최근 주말에 하남 스타필드 다녀오신 분 계신가요? [7] 은빛사막3641 17/03/17 3641
99596 [질문] 서울 서남쪽에선 왜 버스를 뒷문에서 타나요?? [24] 피지알중재위원장4269 17/03/17 4269
99595 [질문] 밑에 주일 글 보고 궁금한데 조선시대에는 언제 쉬었나요? [4] dk793246 17/03/17 3246
99594 [질문]  벅스나 멜론은 맥북에서는 못듣나요? [12] 아끼자4099 17/03/17 4099
99593 [질문] 빔프로젝터 추천좀 부탁드립니다! [1] 고양사람2331 17/03/17 2331
99592 [질문] 제주도 항공권 예매 관련 질문입니다. [10] 원스3966 17/03/17 3966
99591 [질문] 전공분야 관련 위키 만들고 싶은데요. [4] 1llionaire3722 17/03/17 3722
99590 [질문] 인터넷뱅킹 때문에 vmware 에 윈도우 설치후 정품인증해서 쓰고 있는데요... 마르키아르3052 17/03/17 3052
99589 [질문] '주일'이란 말이 상식으로 알아야하는 말인가요? [102] 리나시타5666 17/03/17 5666
99588 [질문] 휴대폰 변경 문의 (다른폰에 현재 유심 옮기기) [6] spike665252 17/03/17 5252
99587 [질문] [연애]서로 이해 못하는 부분을 어떻게 해결해야 할까요? [69] Secundo6268 17/03/17 6268
99586 [질문] 통영 도다리 쑥국 맛집 추천 부탁드립니다. [1] 마산아이돌나스타3059 17/03/17 3059
99585 [질문] 샤오미 보조배터리 AS 가능한가요? [6] 지포스25021 17/03/17 5021
99583 [질문] 엑셀 잘다루시는 분들께 질문드립니다. [1] 딱총새우2159 17/03/17 2159
99582 [질문] G430 헤드셋 사용하시는 분들께 설정 질문드립니다. [3] Eis7850 17/03/17 7850
99581 [질문] 혹시 신촌에 사이비 비슷한 단체 있나요? [7] 종종종그그미3841 17/03/16 3841
99580 [질문] 출퇴근시간이 길어져서 퇴직할때... [3] Paul Pogba3529 17/03/16 3529
99579 [질문] ps4 시스템 소프트웨어 업데이트 오류 [6] 삭제됨7979 17/03/16 7979
99578 [질문] 아이폰 와이파이 연결할때 비밀번호를 입력해서 연결하고 싶은데 도와주세요!! [2] 부폰3351 17/03/16 3351
99577 [질문] SQL 문자열 컬럼에서 이럴경우 어떻게 정렬해야할까요? [7] eosdtghjl4374 17/03/16 4374
99576 [질문] 위쳐 3 구매 관련 문의입니다. (위처 3... 음 Witcher 3) [8] 이슬먹고살죠3653 17/03/16 3653
99575 [질문] [게임] 호라이즌 제로 던 시디로사나 디지털 구입이나 차이없나요?? [10] BJ장어의심장3237 17/03/16 3237
99574 [질문] 근데 헌법재판소 8인 결정은 위헌 아닌가요? [34] 탐브레디8069 17/03/16 8069
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로