SQLテーブルクエリ設定

mysql sql

次のような表があります。

UID |制限|タイプ8 | 4 | A 8 | 5 | B 8 | 6 | C

私はクエリが欲しい、それはこれらの値のすべてを返すが、このように一行で:

UID | A | B | C 8 | 4 | 5 | 6

誰もがSQLでそれを行う方法を知っていますか? 私はMySQLを使います。

  3  0


ベストアンサー

PIVOTコマンドを試してください。 良い例です。

必要なコマンドは次のようになります。

SELECT UID、A、B、C FROM(SELECT * FROM table1)t1ピボット([タイプ] IN(A、B、C)の合計(制限))AS pvt

SUMは他の集約関数に置き換えることができます

6


どのデータベーステクノロジを使用しているかをお知らせください。 SQL Serverでは、PIVOTが最適です。 ORACLEでは、CONNECT BY構文が機能する可能性があります。

あなたの型が固定されていて、ほとんどどこでもうまくいく醜い問い合わせを気にしないのであれば、以下で十分です。

SELECT T.UID、MIN((テーブルAからのSELECT制限WHERE A.UID = T.UID ANDタイプ= 'A'))A、MIN((テーブルBからの選択制限WHERE B.UID = T.UID ANDタイプ= )B、MIN((テーブルCからの選択制限、C.UID = T.UIDおよびタイプ= 'C')C)テーブルからのTグループGROUP BY T.UID

MIN関数は、GROUP BY句に列A、B、Cが含まれていないことに関するデータベースサーバからの苦情を避けるために使用されます。

ずるいと遅いが、それは動作します。

ほとんどのデータベースシステムではもっと速いかもしれません(1つのタイプがUIDごとに複数のレコードを持っているならここでデカルトに注意する)もう一つのアプローチは:

SELECT Driver.UID、A.Limit A、B.Limit B、C.Limit C From theテーブルドライバINNER JOIN TheテーブルA on Driver.UID = A.UID AND A.Type = 'A'内部JOIN TheTable B Driver.UID = B.UID AND B.Type = 'B'内部結合テーブルC Driver.UID = C.UID AND C.Type = 'C'

3


MySQLでは、テーブルを数回結合することでこれを実現できます。

tbl t1内部結合tbl t2からt1 tu t = t2.uidおよびt2.type = 'A'内部結合tbl t3 onからt1.uid、t2.limitをA、t3.limitをB、t4.limitをCとして選択します。 t1.uid = t3.uidおよびt3.type = 'B'内部結合tbl t4 t1.uid = t4.uidおよびt4.type = 'C'

3


他の提案に加えて、あなたはそれ自身でテーブルに参加することができます:

base.uid、a.limit、b.limit、c.limitを選択(テーブルから個別のuidを選択)base左結合テーブルa on base.uid = a.uidおよびa.type = 'A'左結合テーブルbase.uid = b.uidおよびb.type = 'B'は、結合テーブルcをbase.uid = c.uidおよびc.type = 'C'上に残しました

これは、(uid、type)が行の一意の識別子であると仮定しています。

3


タイトルとURLをコピーしました