2017-02-03 4 views
0

오후, 나는 다음과 같은 SQL 명령이 있습니다은 행 기준에 따라 특정 데이터를 입력

SELECT INVOICE_ID, ITEM_ID, CUSTOMER_ORDER_INV_JOIN order_no 시리얼 = '* 1007'FROM order_no 시리얼, CLIENT_STATE 을;

이 다음과 같은 정보를 가져옵니다 :

[여기 이미지 설명을 입력합니다] [1]

이 내가 도달하고자하는 특정 기준이고 그 다음이다

:

주문 No : * 1007, 모든 행의 클라이언트 상태 = PaidPosted이면 모든 행에 'PaidPosted'를 표시 할 다른 열이 필요합니다. 주문 주문 번호 : * 1007, 4 줄에 클라이언트 상태 = 'PaidPosted'하지만 1 줄 이상 = '게시 됨'이면 '게시 됨'을 표시 할 줄이 필요한 다른 열이 필요합니다. 그러나 모든 행이 NULL이면 모든 행에 '송장 없음'이 표시되는 열이 필요합니다.

잘하면이 말이 더 바람직합니다.

+1

샘플 데이터와 이에 대한 예상 출력을 제공하십시오. – GurV

+0

안녕하세요, 나는 가지고 있다고 생각했습니다. 여기서 내가보고 싶은 것은 게시 된 애셋 만 표시되는 것입니다. 그러나 이것을 예를 들어 PostedAuth1로 변경할 수 있기를 원합니다. –

+0

* 이것을 내가 게시 된 Auth1 *로 변경할 수 있기를 원합니다 - 그게 무슨 뜻입니까? 생각만큼 명확하지 않습니다. – GurV

답변

0

나는 이것이 당신에게 필요한 것을 얻을 것이라고 생각합니다.

CREATE TABLE #Sort_Order 
(myOrder INT, 
CLIENT_STATE NVARCHAR(20) 
) 

INSERT INTO #Sort_Order 
VALUES(1, 'Preliminary') 
INSERT INTO #Sort_Order 
VALUES(2, 'PostedAuth') 
INSERT INTO #Sort_Order 
VALUES(3, 'PaidPosted') 

이 그럼 당신은 너무처럼에 RANK 함수를 테이블에 가입하고 실행할 수 있습니다 :

SELECT 
A.*, 
DENSE_RANK() OVER (PARTITION BY A.ID 
        ORDER BY B.myOrder ASC) AS OrderRank 
FROM #Temp A 
INNER JOIN #Sort_Order B On (A.CLIENT_STATE = B.CLIENT_STATE) 
WHERE A.ID = 1 

것은이 당신에게 줄 것이다 당신은 당신의 정렬 순서가있는 임시 테이블을 만들 수 있습니다 RANK에 의한 결과 및 WHERE 문을 사용하여 RANK = 1 만 필터링 가능

데이터에 동일한 클라이언트 상태의 행이 여러 개 있으면 DISTINCT 또는 GROUP BY를 수행해야합니다.

관련 문제