1

次のテーブルのピボットを解除しようとすると問題が発生します。

| | 操作 | ...その他の列... | A1 | B1 | C1 | A2 | B2 | C2 | A3 | B3 | C3 | ... |

このようなものに...

| | 操作 | ...その他の列... | A値 | B値 | CValue |

今はこんな感じでやってます

SELECT operation , ...other columns , Avalue, BValue , CValue
FROM (SELECT operation, ...other columns, A1, B1, C1
      FROM MyTable

      UNION ALL  

      SELECT operation, ...other columns, A2, B2, C2
      FROM MyTable

      UNION ALL

      SELECT operation, ...other columns, A3, B3, C3
      FROM MyTable
)

問題は、私が 30 セットの ABC を持っていることです。unpivot を使用してみましたが、適切な解決策を思い付くことができませんでした。これを使用するのはこれが初めてです。

これは UNPIVOT を使用した私の試みです

SELECT opration
       , ...other columns ...
       ,AValue
       ,BValue
       ,CValue
FROM     MyTable
UNPIVOT ( [AValue] FOR XX IN (A1,A2,A3,...,A30)) AS upv1
UNPIVOT ( [BValue] FOR yy IN (B1,B2,B3,...,B30)) AS upv2
UNPIVOT ( [CValue] FOR ZZ IN (C1,C2,C3,...,C30)) AS upv3

問題は、予想される行が約 10k であるはずなのに、なぜ何百万行も返されるのか理解できないことです。何か案は?

編集:各 UNPIVOT は、「データ爆発」を引き起こす前の unpivot ステートメントの結果セットで機能することに気付きました。

ありがとう

4

2 に答える 2

1

終わり!プラメン・ラチェフがここで最後の助けをくれました

SELECT opration
       , ...other columns ...
       ,AValue
       ,BValue
       ,CValue
FROM     MyTable
UNPIVOT ( [AValue] FOR XX IN (A1,A2,A3,...,A30)) AS upv1
UNPIVOT ( [BValue] FOR yy IN (B1,B2,B3,...,B30)) AS upv2
UNPIVOT ( [CValue] FOR ZZ IN (C1,C2,C3,...,C30)) AS upv3
WHERE RIGHT(XX, 2) = RIGHT(YY, 2)
  AND RIGHT(XX, 2) = RIGHT(ZZ, 2)
于 2009-12-10T16:35:55.877 に答える
0

あなたが探しているものについてはあまり明確ではありませんが、「ユニオンオール」ではなく「ユニオン」を試すことができます。

于 2009-12-10T14:18:14.167 に答える