-1

PIVOTED列にCASESELECTステートメントを含める方法はありますか。私のコードは次のとおりです

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

 ) src 

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

次のような出力が得られます

   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が割り当てられているため、結果を1行にのみ要約し、RN列に表示する値を1つだけ選択して、条件に基づいて結果が次のようになるようにします。

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

2 に答える 2

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 FiddlewithDemoを参照してください

または、次を使用できます。

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
于 2012-11-08T18:35:15.857 に答える
0

[RN]自体はMAX条件の対象となるため、つまりそれ自体がピボット列であるため、ピボット後にデータを削除する必要があります。それをCTEでラップし、RowNumber()関数を適用して正しくパーティション分割してから、パーティションごとに1行だけフィルター処理します。

;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;
于 2012-11-08T19:46:24.347 に答える