mssql where in 입력순서대로 출력 0 11 7,679

by yky [SQLServer] #mssql #query [2017.11.02 09:06:48]


mssql 쿼리 출력중

 

ex) select * from table where in ('id2','id3','id1') 일때

in에넣은순서대로 id2,id3,id1 순서로 출력하고 싶습니다.

order by 는 숫자나 알파뱃순서만 정렬될것같은데..

mssql에서 where in 절에 넣은 순서대로 출력하는 방법은 없을까요?

답변들 부탁드립니다.

by 우리집아찌 [2017.11.02 09:15:45]
-- 잘모르겠네요.
WITH T AS (
SELECT 'ID1' VAL UNION ALL
SELECT 'ID2' UNION ALL
SELECT 'ID3' 
)

SELECT  * FROM T 
WHERE VAL IN ( 'ID2','ID3','ID1')
ORDER BY CASE WHEN VAL = 'ID2' THEN 1 
              WHEN VAL = 'ID3' THEN 2
			  WHEN VAL = 'ID1' THEN 3 
         END 

 


by yky [2017.11.02 09:20:05]

답변 감사합니다.

저 in 안에 들어가는 수가 몇백개라 ㅜㅜ 값마다 조건주는건 무리가될것같아요.


by 우리집아찌 [2017.11.02 09:24:43]
-- ORACEL
WITH T AS (
SELECT 'ID1' VAL FROM DUAL UNION ALL
SELECT 'ID2'     FROM DUAL  UNION ALL
SELECT 'ID3'     FROM DUAL 
) , T2 AS (
SELECT 'ID2,ID3,ID1' TXT FROM DUAL
) , ORDER_T AS (
SELECT LEVEL RN , REGEXP_SUBSTR(TXT ,'[^,]+' , 1 , LEVEL   ) VAL
  FROM T2 CONNECT BY LEVEL <= (SELECT REGEXP_COUNT(TXT,',')+1 FROM T2 )
)
  

SELECT A.VAL 
  FROM T A , ORDER_T B
WHERE A.VAL IN ( 'ID2','ID3','ID1')
  AND A.VAL = B.VAL
ORDER BY B.RN

 


by yky [2017.11.02 10:59:40]

오라클인가요?ㅜ 답변 감사합니다!


by 마농 [2017.11.02 09:44:09]

그 몇백개 조건은 어디서 어떤 방법으로 가져오나요?
테이블에서 가져와 문자 연결 시켜서 IN 조건에 주는 거라면?
바로 테이블끼리 조인하는 방법을 사용하세요.


by yky [2017.11.02 10:02:53]

제가 select문으로 뽑은게아니고 엑셀에있는데이터라 ㅜㅜ 엑셀에서 새로열 아이디 쭉복사한후 '', 전부 붙여서 in안에 아이디가 300개정도들어갑니다. in 안에 들어간순서대로 출력을 하고싶은데.. 안될까요?

ex) select * from table where and id in (

'b',

'a',

'c'

....

)


by 마농 [2017.11.02 10:36:54]

1. 우선 엑셀의 첫컬럼에 순번 만드시고
2. 엑셀을 이용해 union all with 문을 만들어 사용하세요.

WITH xlsx(seq, id) AS
(
SELECT 1, 'ID2'
UNION ALL SELECT 2, 'ID3'
UNION ALL SELECT 3, 'ID1'
)
SELECT a.*
  FROM table a
 INNER JOIN xlsx b
    ON a.id = b.id
 ORDER BY b.seq
;

 


by yky [2017.11.02 10:58:54]

오.. 이런 방법도 있네요. 할수있을것같습니다. 감사합니다!


by yky [2017.11.02 11:28:49]

하나만 더 질문드려도될까요?

정렬은 원하는대로 출력하였는데

아이디로 값을 조회하는데 한아이디당 여러개의 값이 있을 수 있어서

id는 한개만 존재하고 값을 한열에 두개존재하게 하고 싶습니다.

 

id1   값1
id2   값2
id2   값3
id3   값4
id4   값5

.....

이런식으로 나왔다면

id1 값1

id2 값2 , 값3

id3 값4

id4 값5

 

이렇게 행의 갯수는 union 에넣었던갯수와 일치하게하고 싶은데 좋은 방법 있을까요?

 


by 마농 [2017.11.02 11:37:00]
WITH xlsx(seq, id) AS
(
SELECT 1, 'ID2'
UNION ALL SELECT 2, 'ID3'
UNION ALL SELECT 3, 'ID1'
)
SELECT a.seq
     , a.id
     , STUFF((SELECT ',' + b.v
                FROM table b
               WHERE b.id = a.id
               ORDER BY b.v
                 FOR XML PATH('')
              ), 1, 1, '') v
  FROM xlsx a
;
-- http://www.gurubee.net/article/55512

 


by yky [2017.11.02 13:33:54]

와.. 굉장하시네요 원하는대로 다만드시는것같아요ㅜ 해결됬습니다 감사합니다!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입