1

いくつかの列でgroupについて記述し、結果セットを計算するクエリがあります。

これが私の要件です。3列のテーブル名Table_1がありますid, key, value。レコードはのようなものid_1 key_1 value_1です。value同じidグループに属し、そのグループの下にidすべてが存在するものを見つけたいと思いkeyます。

次に例を示します。

id=id1, key=key1, value=value1
id=id1, key=key1, value=value2
id=id1, key=key2, value=value2
id=id1, key=key2, value=value3
id=id1, key=key3, value=value1
id=id1, key=key3, value=value2
id=id1, key=key3, value=value3

id=id2, key=key1, value=value2
id=id2, key=key1, value=value3
id=id2, key=key2, value=value2
id=id2, key=key2, value=value3
id=id2, key=key3, value=value1
id=id2, key=key3, value=value2
id=id2, key=key3, value=value3

結果はid1, value2とする必要がありid2, value2 id2, value3ます。

すべてkeyの下id1に値がvalue2 あり、すべてkeyの下id2に値value2とがありvalue3ます。

4

1 に答える 1

1

(ID、KEY、VALUE)が一意の組み合わせを形成すると仮定すると、つまり、IDごとにKEYごとにVALUEのインスタンスが1つだけ機能するはずです。

with data_k as ( select id 
                      , count(distinct key) no_of_key
               from your_table
                group by id )
     , data_v as ( select id 
                      , value
                      , count(*) no_of_value
               from your_table
                group by id, value )
select distinct data_k.id
       , data_v.value
       , data_k.no_of_key 
       , data_v.no_of_value
from data_k
     join data_v on (data_k.id = data_v.id)
where data_k.no_of_key = data_v.no_of_value
order by data_k.id, data_v.value;

あなたが期待している実際の結果がはっきりしないので、私はただ予測を推測しました。

このバージョンは機能します。これを証明するSQLフィドルがあります

于 2013-01-26T09:14:13.047 に答える