2012-11-08 2 views
-1

PIVOTED 열에 CASE SELECT 문을 사용할 수 있습니까?Select PIVOT

Pname  RN   HA   LVN  MSW  SC 
    AA  AG-2/W LO-1/W  NA-1/W  SK-2/W  NO-2/MON 
    AA  JL-2/W  NULL   NULL  NULL  NULL 

을 다음과 같이 1 PN에 할당 된 2 RN들이 되었기 때문에 내가 출력을 얻고있다

SELECT PName, [RN], [HA], [LVN], [MSW], [SC] 
FROM 
(
    Query 

) src 

    pivot 
    (
    max(Visits) 
    for Discipline in ([RN], [HA], [LVN], [MSW], [SC]) 
    ) piv 

를 다음과 같이 내 코드가 난 단지 1 행의 결과를 요약 만 1 선택하려는 것입니다 RN 열에 표시 할 값으로 내 조건에 따라 결과가 다음과 같이 표시됩니다. 전체 쿼리를 보지 않고

Pname  RN   HA   LVN  MSW  SC 
    AA  JL-2/W LO-1/W  NA-1/W  SK-2/W  NO-2/MON 

답변

0

당신은해야합니다 [RN] 자체가 MAX 조건의 영향을 받기 때문에 피벗 후 데이터를 제거해야합니다. 즉, 피벗 열입니다. CTE로 래핑하고 RowNumber() 함수를 적용하고 올바르게 파티션 한 다음 파티션 당 단 하나의 행으로 필터링하십시오.

;WITH CTE AS (
    SELECT PName, [RN], [HA], [LVN], [MSW], [SC], 
      ROW_NUMBER() OVER (partition by PName order by [RN] ASC) RowNum 
    FROM 
    (
     Query 

    ) src 

     pivot 
     (
     max(Visits) 
     for Discipline in ([RN], [HA], [LVN], [MSW], [SC]) 
     ) piv 
) 
SELECT * 
    FROM CTE 
WHERE RowNum = 1; 
1

, 당신은 내부 쿼리에 ROW_NUMBER을 적용 할 수 있어야하고이 유사한 WHERE 절을 사용하면 전체 쿼리를 작성하는 경우가,

SELECT PName, [RN], [HA], [LVN], [MSW], [SC] 
FROM 
(
    <yourQuery>, row_number() over(order by somefield) rn -- add a rownumber here 
) src 
pivot 
(
    max(Visits) 
    for Discipline in ([RN], [HA], [LVN], [MSW], [SC]) 
) piv 
where rn = 1 

을 이 작업을 수행하는 다른 방법 일 수 있습니다.

편집, 이전 질문에서 귀하의 정보를 사용하여 쿼리는 다음과 같이 될 것이다 :

select patname, [HA], [MSW], [RN] 
from 
(
    select patName, Disc, 
    sname+' '+schedule new_value, 
    row_number() over(partition by patname, disc order by disc) rowNum 
    from yourquery 
) src 
pivot 
(
    max(new_value) 
    for disc in ([HA], [MSW], [RN]) 
) piv 
where rownum = 1 

SQL Fiddle with Demo

를 참조하거나 다음을 사용할 수 있습니다

select * 
from 
(
    SELECT PName, [RN], [HA], [LVN], [MSW], [SC] , row_number() over(partition by PName order by PName) rn 
    FROM 
    (
     <yourQuery> 
    ) src 
    pivot 
    (
     max(Visits) 
     for Discipline in ([RN], [HA], [LVN], [MSW], [SC]) 
    ) piv 
) x 
where rn = 1 
+0

@ user1764540 'rownum'을 외부 'where'에 넣으면 결과는 무엇입니까? 왜 효과가 없다고하니? – Taryn

+0

내 문제를 해결해 주셔서 감사합니다. – user1764540