1

初めて PIVOT を使用しようとしていますが、動作させることができません。何が間違っているのかわかりません。

私は厄介な選択ステートメントから始めました。これらの結果を取得すると、結果を取得できます。私が行っていることは、Excel にエクスポートし、そこでピボット関数を使用することです。データを Excel に取り込むときは、次の操作を行います: http://imgur.com/N024rEi

次に、次のステップに進み、SQL でピボット全体を実行しようとしましたが、うまくいきませんでした。これが私のコードです:

SELECT DISTINCT #tmp1.AuthID
, #tmp1.ProviderID
, #tmp1.ProviderName
, #tmp1.LOCID
, #tmp1.LOCDesc
, '$' + CONVERT(VARCHAR,CAST(#tmp1.TotAuthAmt AS MONEY),-1) AS 'ToAuthAmt'
, CONVERT(VARCHAR(10), #tmp1.AuthDate, 101) AS AuthDate, 
CONVERT(VARCHAR(10), #tmp1.AuthExpirationDate, 101) AS AuthExpirationDate
, DATEDIFF(D,#tmp1.AuthDate,#tmp1.AuthExpirationDate) AS AuthLenInDays
,   (CASE WHEN 
        ISNULL(#tmp2.TotPaidAmt, 0) = 0 THEN '$0.00' 
        ELSE '$' + CONVERT(VARCHAR,CAST(#tmp2.TotPaidAmt AS MONEY),-1) 
    END) AS TotPaidAmt,
#tmp1.NbrOfAuthorizations
, #tmp1.UnitsAuthorized
, #tmp1.RatePerUnit
, #tmp1.CAREMODE
,   (CASE WHEN 
        ISNULL(#tmp2.UnitsAdjudicated, 0) = 0 THEN 0 
        ELSE #tmp2.UnitsAdjudicated 
    END) AS AuthUnitsClaimed
, (#tmp1.UnitsAuthorized - 
    (CASE WHEN 
        ISNULL(#tmp2.UnitsAdjudicated, 0) = 0 THEN 0 
        ELSE #tmp2.UnitsAdjudicated 
    END)) AS UnclaimedAuths
,   (CASE WHEN 
        ISNULL(#tmp2.ExpiredAuths, 0) = 0 THEN 0 
        ELSE 1 
    END) AS ExpiredIndicator

FROM (SELECT 
DISTINCT #tmp1.AuthID
, #tmp1.ProviderID
, #tmp1.ProviderName
, #tmp1.LOCID
, #tmp1.LOCDesc
, '$' + CONVERT(VARCHAR,CAST(#tmp1.TotAuthAmt AS MONEY),-1) AS 'ToAuthAmt'
, CONVERT(VARCHAR(10), #tmp1.AuthDate, 101) AS AuthDate
, CONVERT(VARCHAR(10), #tmp1.AuthExpirationDate, 101) AS AuthExpirationDate
, DATEDIFF(D,#tmp1.AuthDate,#tmp1.AuthExpirationDate) AS AuthLenInDays
, (CASE WHEN 
        ISNULL(#tmp2.TotPaidAmt, 0) = 0 THEN '$0.00' 
        ELSE '$' + CONVERT(VARCHAR,CAST(#tmp2.TotPaidAmt AS MONEY),-1) 
    END) AS TotPaidAmt,
#tmp1.UnitsAuthorized
, #tmp1.RatePerUnit
, #tmp1.CAREMODE
,   (CASE WHEN 
        ISNULL(#tmp2.UnitsAdjudicated, 0) = 0 THEN 0 
        ELSE #tmp2.UnitsAdjudicated 
    END) AS AuthUnitsClaimed
, (#tmp1.UnitsAuthorized - 
    (CASE WHEN 
        ISNULL(#tmp2.UnitsAdjudicated, 0) = 0 THEN 0 
        ELSE #tmp2.UnitsAdjudicated 
    END)) AS UnclaimedAuths
,   (CASE WHEN 
        ISNULL(#tmp2.ExpiredAuths, 0) = 0 THEN 0 
        ELSE 1 
    END) AS ExpiredIndicator
FROM #tmp1
LEFT JOIN #tmp2 
ON #tmp2.AuthID = #tmp1.AuthID 

GROUP BY #tmp1.AuthID, #tmp1.ProviderID, #tmp1.LOCID, #tmp1.LOCDesc, #tmp1.UnitsAuthorized, #tmp1.RatePerUnit, #tmp1.FamilyID, #tmp1.ProviderName, #tmp1.TotAuthAmt,
#tmp1.AuthDate, #tmp1.AuthExpirationDate, #tmp2.TotPaidAmt, #tmp1.NbrOfAuthorizations, #tmp1.CAREMODE, #tmp2.UnitsAdjudicated, #tmp2.ExpiredAuths
)#tmp1

PIVOT (
SUM(#tmp1.NbrOfAuthorizations) FOR ProviderName
IN (#tmp1.ProviderName)
) AS #tmp1

これを機能させるには、ここで何を変更する必要がありますか? また、スクリーンショットに示されているように、他のアイテムを追加するにはどうすればよいですか?

EDIT1:これをPIVOTに使用した後、結果を得ることができたようです:

PIVOT
(SUM(NbrOfAuthorizations) FOR [ProviderName] IN (element1, element2, etc.)

) PivotResults1

PIVOT
(AVG(AuthLenInDays) FOR [CAREMODE] IN ([element1])

) PivotResults2

しかし、まだいくつかの問題があります... SUM ステートメントは、実際には特定の値の値を 1 つの列に合計していないようです。次の例のように、各セルに「1」または NULL が表示されます: http://www.codeproject.com/Tips/500811/Simple-Way-To-Use-Pivot-In-SQL-Query。もう 1 つは、AVG 列の場合です。その列の名前を変更する方法がわかりません。常に element1 の名前です。

4

1 に答える 1