0

次の表があります (これは、バナー ID とそれぞれに使用可能なサイズのリストです)。

bannerid, bannersize
--------------------
1, 16
1, 32
1, 128
2, 16
2, 32
2, 128
2, 256
2, 512
3, 16
3, 32
3, 64
3, 128
3, 256
3, 512
3, 1024

すべての可能なサイズ (16、32、64、128、256、512、1024) を持つすべてのバナー ID のリストを生成できる必要があります。

したがって、この例では、結果は次のようになります。

bannerid
--------
3, 16
3, 32
3, 64
3, 128
3, 256
3, 512
3, 1024

上記のように、bannerid 3 には可能なすべてのサイズがあるため (1 と 2 にはいくつかのサイズがありませんでした)。

これを達成するための良い方法は何ですか? 同じテーブルで結合を 7 回実行し、考えられるすべてのサイズの組み合わせが存在することを確認するよりも良い方法があると思います。

また、表示されるバナー ID を制御する方法も必要です。(a) すべてのサイズに一致するもの、または (b) 指定した一部のサイズに一致するもの。

4

3 に答える 3

4

これを試して :

select b.* from banners b inner join
( select bannerid,count(bannersize) bl from banners
group by bannerid
having count(bannersize) = (select count(distinct(bannersize)) cl from banners) ) ab
on b.bannerid=ab.bannerid

また、 Sqfiddleで試すこともできます

于 2012-10-21T12:32:47.000 に答える
1

使用しているDBを投稿していません。SQLServer2005+(またはOracle 11g +)を使用している場合は、PIVOTを使用して投稿できます。

クエリ:

select * from banner
pivot (count(bannersize) for bannersize in ([16], [32], [64], [128], [256], [512], [1024])) as bann
where [16] > 0 and [32] > 0 and [64] > 0 and [128] > 0 and [256] > 0 and [512] > 0 and [1024] > 0

出力を提供します:

BANNERID 16 32 641282565121024
3 1 1 1 1 1 1 1

wheremodyfing句を使用すると、「(b)指定したサイズに一致する」を実現できます。

この出力は要求されたものとは異なりますが、このクエリをサブクエリとして使用することで「修正」できます。

select * from banner
where bannerid in
(
select bannerid from banner
pivot (count(bannersize) for bannersize in ([16], [32], [64], [128], [256], [512], [1024])) as bann
where [16] > 0 and [32] > 0 and [64] > 0 and [128] > 0 and [256] > 0 and [512] > 0 and [1024] > 0
)
于 2012-10-21T02:49:46.863 に答える
0

Q: 私のテーブルは、それぞれのバナー ID と使用可能なサイズのリストです。すべての可能なサイズを持つすべての bannerid のリストを生成できる必要があります。

A: テーブル内のすべてが必要なようですね :)

select * from mytable order by bannerid

テーブルに除外したい他の列がある場合は、次のようにします。

select bannerid, bannersize from mytable order by bannerid

1 つのバナー ID (例: "3") の使用可能なサイズのみが必要な場合は、

select bannerid, bannersize from mytable where bannerid = 3

特定のバナー ID (「1」と「3」など) から利用可能なサイズが必要な場合は、

select bannerid, bannersize from mytable where bannerid in (1, 3)

于 2012-10-21T00:46:26.757 に答える