안녕하세요
업무중 쿼리를 어떻게해야할지 고민하다가 조언얻고자 질문드립니다..
가맹점 | 고객번호 | 데이터1 | 데이터2 | 데이터3 | 데이터4 |
A | 1 | ' | ' ' | ' | ' |
A | 2 |
|
|
|
|
B | 3 |
|
|
|
|
B | 4 |
|
|
|
|
B | 1 |
|
|
|
|
위의 표에서 보이는 가맹점, 고객번호가 일치하는 데이터를 제외한 나머지값을 가져오고싶습니다.
데이터가 100개가 있으면, 위의 5개를 제외한 95개를 가져와야합니다.
저는 만들어져있는 함수를 이용해서(정말간단하게 조회할수있습니다) 데이터를 가지고오고싶은데 잘안되네요
함수 정의는 이렇습니다.
------------------------------------------------------------------------------------------------------------------------------------------------
소스에서 파라미터를 가맹점(@_CD_PARTNER), 고객번호(@P_CUST_SEQ)를 PIPE 형식으로 가져옵니다.
파이프로 가져온 데이터를 조회할때 쓰는 함수(GETTABLEFROMSPLIT)가 있는데
WHERE조건에
CUST_SEQ NOT IN (SELECT CD_STR FROM GETTABLEFROMSPLIT(@P_CUST_SEQ)
을 걸면 파이프로가져온 고객번호를 제외한 나머지값을 조회합니다.
CUST_SEQ로만 하면 데이터는 96개가 나옵니다. 1은 중복이 되니깐요..
제가 하고싶은것은 두개를 PK로 가지고 하려합니다. 즉 데이터는 95개가 나와야겠지요..
위 함수를 이용해서 데이터를 추출하고싶은데 방법이 없을까요?
Comment 1
-
항해자™
2016.06.16 12:27
아래 함수를 활용해 보세요,,,create function dbo.fnTbl2NString( @pString xml) returns tableasreturn (select row_number() over(order by (select 1)) as cRows, col.value('@n','nvarchar(1000)') as cValuefrom @pString.nodes('/x') as a (col))godeclare @vString varchar(max) = 'A^1|A^2|B^3|B^4|B^1'declare @vXML xml = convert(xml,N'<x n="'+ replace(@vString,'|','"/><x n="') +'"/>')create table #tmpGuest(cStore char(1) not null,cCust int not null)insert into #tmpGuestselect max(case b.cRows when 1 then b.cValue end) as cStore, max(case b.cRows when 2 then b.cValue end) as cCustfrom dbo.fnTbl2NString(@vXML) as across apply (select *from dbo.fnTbl2NString(convert(xml,'<x n="'+ replace(a.cValue,'^','"/><x n="') +'"/>'))) as bgroup by a.cRowsgo