Select a.part_no,b.part_no,b.model_cd,STUFF((
SELECT '/' + model_cd
FROM bit_part_model c
WHERE b.part_no = c.part_no
and c.use_yn='Y'
FOR XML PATH('')
),1,1,'') AS model_cd
,STUFF((
SELECT '/' + e.model_nm
FROM bit_part_model d
inner join bit_model e on d.model_cd = e.model_cd
WHERE d.part_no = b.part_no and d.use_yn='Y'
FOR XML PATH('')
),1,1,'') AS model_nm ,b.use_yn
FROM biv_part a
inner join bit_part_model b on a.part_no = b.part_no
where b.part_no='0031733075'
쿼리를 실행시키면 이렇게 나옵니다.
part no part no model_cd model_cd model_nm use_yn
0031733075 0031733075 CCD CPT/ELN/RIO CAPITAL/ELAN/RIO 1 N
0031733075 0031733075 CPT CPT/ELN/RIO CAPITAL/ELAN/RIO 1 Y
0031733075 0031733075 ELN CPT/ELN/RIO CAPITAL/ELAN/RIO 1 Y
0031733075 0031733075 RIO CPT/ELN/RIO CAPITAL/ELAN/RIO 1 Y
제가 원하는 쿼리는
0031733075 0031733075 CPT CPT/ELN/RIO CAPITAL/ELAN/RIO 1 Y
0031733075 0031733075 ELN ELN /CPT/RIO ELAN/CAPITAL/RIO 1 Y
0031733075 0031733075 RIO RIO /CPT/ELN RIO /CAPITAL/ELAN Y
자기 자신이 맨앞으로 하는건 어떻게 해야하나요?ㅠㅠ
Comment 5
-
곰요
2014.10.21 08:53
-
곰요
2014.10.21 09:02
자기자신부터 시작해서 나오는걸 하고 싶은건 model_cd 랑 ,model_nm 입니다
-
곰요
2014.10.21 09:52
ㅠㅠ 어떻게 할수있는방법이 없을까요?
-
건우아빠
2014.10.21 10:21
불규칙적이다면 그냥 함수를 하나 만들어서 사용하시는게 좀 편할듯 합니다..
http://www.sqler.com/141578 참고
http://www.sqler.com/145575 함수with res as
( select 'CCD' model_key ,'CPT/ELN/RIO' model_cd, 'CAPITAL/ELAN/RIO' model_nm union all
select 'CPT','CPT/ELN/RIO', 'CAPITAL/ELAN/RIO' union all
select 'ELN','CPT/ELN/RIO', 'CAPITAL/ELAN/RIO' union all
select 'RIO','CPT/ELN/RIO', 'CAPITAL/ELAN/RIO' )select model_key
, model_cd
, model_nm
-- , LEN(model_cd+'/')
-- , LEN( REPLACE(model_cd ,'/',''))
-- , LEN(model_cd+'/') - LEN( REPLACE(model_cd ,'/','')) cnt
-- , CHARINDEX(model_key+'/', model_cd+'/' , 1) loc
, CEILING( CHARINDEX(model_key+'/', model_cd+'/' , 1) /3.)
, case CEILING( CHARINDEX(model_key+'/', model_cd+'/' , 1) /3.)
when 1 then model_cd
when 2 then SUBSTRING(model_cd, 5 ,4)+ LEFT(model_cd,4)+RIGHT(model_cd,3)
when 3 then RIGHT(model_cd,3)+'/'+LEFT(model_cd,7)
else model_cd
end --- 자릿수가 3자리로 규칙적일때는 ....
, case CEILING( CHARINDEX(model_key+'/', model_cd+'/' , 1) /3.)
when 1 then model_nm
when 2 then DBO.MssqlINSTR(model_nm,'/',2) + '/'
+ DBO.MssqlINSTR(model_nm,'/',1) + '/'
+ DBO.MssqlINSTR(model_nm,'/',3)
when 3 then DBO.MssqlINSTR(model_nm,'/',3) + '/'
+ DBO.MssqlINSTR(model_nm,'/',1) + '/'
+ DBO.MssqlINSTR(model_nm,'/',2)
else model_nm
end
from res
-
곰요
2014.10.21 10:31
감사드립니다. (_ _)
순서대로 나오는데 그거말고 자기자신부터 시작해서 나오는건 어떻게 하는지 궁금합니다....