タグ付けされた質問 「unpivot」

2
UNPIVOTを使用する場合、SQL Serverでデータ型の長さが同じである必要があるのはなぜですか?
UNPIVOT正規化されていないデータに関数を適用する場合、SQL Serverではデータ型と長さが同じである必要があります。データ型が同じでなければならない理由を理解していますが、なぜUNPIVOTは同じ長さを必要とするのですか? ピボットを解除する必要がある次のサンプルデータがあるとします。 CREATE TABLE People ( PersonId int, Firstname varchar(50), Lastname varchar(25) ) INSERT INTO People VALUES (1, 'Jim', 'Smith'); INSERT INTO People VALUES (2, 'Jane', 'Jones'); INSERT INTO People VALUES (3, 'Bob', 'Unicorn'); 次のような列FirstnameとLastname列をアンピボットしようとすると: select PersonId, ColumnName, Value from People unpivot ( Value FOR ColumnName in (FirstName, LastName) …

1
UNPIVOTがUNION ALLに変換されるのを防ぐにはどうすればよいですか?
多少複雑なOracleクエリがあり、完了に約30分かかります。クエリの遅い部分を取り出して個別に実行すると、数秒で終了します。以下は、分離されたクエリのSQLモニターレポートのスクリーンショットです。 以下は、完全なクエリの一部として実行される場合と同じロジックです。 色は両方のスクリーンショットの同じ表に対応しています。遅いクエリの場合、Oracle MERGE JOINはに等値条件を持たない2つのテーブル間で実行していますJOIN。その結果、約1億5,000万の中間行が不必要に処理されます。 クエリヒントまたはリライトを使用してこの問題を回避できますが、この問題を将来回避し、バグレポートをOracleに送信できるように、できるだけ多くの根本原因を理解したいと思います。悪いプランを取得するたびUNPIVOTに、クエリテキストUNION ALL内がプラン内に変換されます。さらに調査するために、そのクエリ変換が発生しないようにしたいと思います。この変換の名前を見つけることができませんでした。また、クエリヒントまたはアンダースコアパラメーターを見つけることができませんでした。私は開発サーバーでテストしているので、何でもできます。 私は、クエリ変換を防ぐために行うことができますが何であるUNPIVOTのはUNION ALL?Oracle 12.1.0.2を使用しています。 IPの理由で、クエリ、テーブル名、またはデータを共有できません。単純な複製を思い付くことができませんでした。とはいえ、質問に答えるためにその情報が必要な理由は私にはわかりません。以下は、UNPIVOTクエリと、UNION ALLとして実装された同じクエリの例です。

1
UNPIVOT(ループ結合)でバッチモードを使用する方法は?
次の形式のクエリがあります。 SELECT ... FROM ColumnstoreTable cs CROSS APPLY ( SELECT * FROM (VALUES ('A', cs.DataA) , ('B', cs.DataB) , ('C', cs.DataC) ) x(Col0, Col1) ) someValues これは、Columnstore-backedサブクエリ(ColumnstoreTable)からすべての行を取得し、それらの行を乗算します。これは本質的にUNPIVOTです。実際のクエリはこれよりも大きくなります。クエリのこの部分は、他の処理に送られます。 ここでの問題は、これCROSS APPLYが合理的な選択であるループ結合として実装されていることです。残念ながら、ループ結合はバッチモードをサポートしていません。 クエリのこの部分はパフォーマンスが非常に重要であり、バッチモードで実行するとパフォーマンスに非常に有益であると思われます。 バッチモードから移行しないように、このクエリを書き換えるにはどうすればよいですか? の代わりに一時テーブルを使用してみましたVALUESが、ハッシュ結合に等価結合条件がないという事実は変わりませんでした。

1
UNPIVOTに動的に列名を渡す
次のデータを含むテーブルがあります First Second Third Fourth Fifth Sixth 2013-08-20 2013-08-21 2013-08-22 2013-08-23 2013-08-24 2013-08-25 そして使用 UNPIVOT SELECT Data ,DATENAME(DW, Data) AS DayName FROM Cal UNPIVOT(Data FOR D IN ( First, Second, Third, Fourth, Fifth, Sixth )) AS unpvt 次の結果が得られます Data DayName 2013-08-20 Tuesday 2013-08-21 Wednesday 2013-08-22 Thursday 2013-08-23 Friday 2013-08-24 Saturday …

1
UNPIVOTが互換性レベル80 DBで機能するのはなぜですか?
互換性レベル80で実行されているSQL Server 2008 SP3データベースでUNPIVOTを使用してデータをプルしようとしています。これは、UNPIVOTが機能しないことを意味しますが、私の場合、特定の状況で機能します... 作品: 次の形式の独立したSELECTクエリ: SELECT...FROM...UNPIVOT...WHERE...GROUP BY 動作しません: LEFT JOIN ()同じサーバー内の異なるデータベース上の他のテーブル上の同じクエリ。すべて互換性レベル80。 通常のエラーメッセージが表示されます。 Msg 325, Level 15, State 1, Line 165 Incorrect syntax near 'UNPIVOT'. You may need to set the compatibility level of the current database to a higher value to enable this feature. See help for the SET …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.