1

データベースへの SELECT 句と WHERE 句だけにアクセスできます。SELECT と FROM の間と WHERE の後の空白を埋めることしかできません ("SELECT _ _ _ _ _ FROM TABLE WHERE _ _ _ _ _")

データベースには、「TShirt1」、「TShirt1Size」、「TShirt2」、「TShirt2Size」の 4 つのフィールドがあります (実際にはもっと多くのフィールドがありますが、これらは関連するものです)。

TShirt1 と TShirt2 の両方に、「RedCrew」、「BlueSlim」、または「GreyV」のいずれかが含まれています。

TShirt1Size と TShirt2Size の両方に、「S」、「M」、「L」、または「XL」のいずれかが含まれます。

各組み合わせの合計数を返すクエリを作成できるかどうかを知りたいです。2 つのフィールドがなければ

SELECT TShirt, TShirtSize, count(*) FROM BookingsTable WHERE 1 GROUP BY TShirt, TShirtSize

だから私は次のような結果を得るでしょう

RedCrew, L, 2
BlueSlim, M, 4

TShirt1 と TShirt2 の結果を組み合わせて、同じまたは類似の出力を得る方法はありますか?

編集:混乱をお詫びします。実際のテーブルは次のようになります (型付きでテストされていません):

create table tshirt (
    TShirt_id int, 
    TShirt1 varchar(10), 
    TShirt1Size varchar(2), 
    TShirt2 varchar(10),
    TShirt2Size varchar(2)
);

insert into tshirt values (1, 'RedCrew', 'XL', 'BlueSlim', 'M'); 
insert into tshirt values (2, 'BlueSlim', 'L', 'RedCrew', 'L'); 
insert into tshirt values (3, 'GreyV', 'L', 'BlueSlim', 'M');
insert into tshirt values (4, 'BlueSlim', 'M', '', ''); 
insert into tshirt values (5, '', '', 'GreyV', 'L'); 
insert into tshirt values (6, 'BlueSlim', 'S', 'BlueSlim', 'L'); 

そして、私が望む結果セット(私の数学が正しい場合)は次のようになります。

BlueSlim, S, 1
BlueSlim, M, 4
BlueSlim, L, 2
GreyV, L, 2
RedCrew, L, 1
RedCrew, XL, 1
4

2 に答える 2

1

さまざまな提案に感謝しますが、それらはすべて私が持っていた限られた範囲外でした. 私は次のクエリで終わった:

SELECT sum( if ((TShirt1='RedCrew' AND TShirt1Size='S') OR (TShirt2='RedCrew' AND TShirt2Size='S'), if ( (TShirt1='RedCrew' AND TShirt1Size='S') AND (TShirt2='RedCrew' AND TShirt2Size='S'), 2, 1), 0)) AS 'RedCrew S',
sum( if ((TShirt1='RedCrew' AND TShirt1Size='M') OR (TShirt2='RedCrew' AND TShirt2Size='M'), if ( (TShirt1='RedCrew' AND TShirt1Size='M') AND (TShirt2='RedCrew' AND TShirt2Size='M'), 2, 1), 0)) AS 'RedCrew M',
sum( if ((TShirt1='RedCrew' AND TShirt1Size='L') OR (TShirt2='RedCrew' AND TShirt2Size='L'), if ( (TShirt1='RedCrew' AND TShirt1Size='L') AND (TShirt2='RedCrew' AND TShirt2Size='L'), 2, 1), 0)) AS 'RedCrew L',
sum( if ((TShirt1='RedCrew' AND TShirt1Size='XL') OR (TShirt2='RedCrew' AND TShirt2Size='XL'), if ( (TShirt1='RedCrew' AND TShirt1Size='XL') AND (TShirt2='RedCrew' AND TShirt2Size='XL'), 2, 1), 0)) AS 'RedCrew XL',
sum( if ((TShirt1='BlueSlim' AND TShirt1Size='S') OR (TShirt2='BlueSlim' AND TShirt2Size='S'), if ( (TShirt1='BlueSlim' AND TShirt1Size='S') AND (TShirt2='BlueSlim' AND TShirt2Size='S'), 2, 1), 0)) AS 'BlueSlim S',
sum( if ((TShirt1='BlueSlim' AND TShirt1Size='M') OR (TShirt2='BlueSlim' AND TShirt2Size='M'), if ( (TShirt1='BlueSlim' AND TShirt1Size='M') AND (TShirt2='BlueSlim' AND TShirt2Size='M'), 2, 1), 0)) AS 'BlueSlim M',
sum( if ((TShirt1='BlueSlim' AND TShirt1Size='L') OR (TShirt2='BlueSlim' AND TShirt2Size='L'), if ( (TShirt1='BlueSlim' AND TShirt1Size='L') AND (TShirt2='BlueSlim' AND TShirt2Size='L'), 2, 1), 0)) AS 'BlueSlim L',
sum( if ((TShirt1='BlueSlim' AND TShirt1Size='XL') OR (TShirt2='BlueSlim' AND TShirt2Size='XL'), if ( (TShirt1='BlueSlim' AND TShirt1Size='XL') AND (TShirt2='BlueSlim' AND TShirt2Size='XL'), 2, 1), 0)) AS 'BlueSlim XL',
sum( if ((TShirt1='GreyV' AND TShirt1Size='S') OR (TShirt2='GreyV' AND TShirt2Size='S'), if ( (TShirt1='GreyV' AND TShirt1Size='S') AND (TShirt2='GreyV' AND TShirt2Size='S'), 2, 1), 0)) AS 'GreyV S',
sum( if ((TShirt1='GreyV' AND TShirt1Size='M') OR (TShirt2='GreyV' AND TShirt2Size='M'), if ( (TShirt1='GreyV' AND TShirt1Size='M') AND (TShirt2='GreyV' AND TShirt2Size='M'), 2, 1), 0)) AS 'GreyV M',
sum( if ((TShirt1='GreyV' AND TShirt1Size='L') OR (TShirt2='GreyV' AND TShirt2Size='L'), if ( (TShirt1='GreyV' AND TShirt1Size='L') AND (TShirt2='GreyV' AND TShirt2Size='L'), 2, 1), 0)) AS 'GreyV L',
sum( if ((TShirt1='GreyV' AND TShirt1Size='XL') OR (TShirt2='GreyV' AND TShirt2Size='XL'), if ( (TShirt1='GreyV' AND TShirt1Size='XL') AND (TShirt2='GreyV' AND TShirt2Size='XL'), 2, 1), 0)) AS 'GreyV XL' 
WHERE 1;

PHPで生成したもの:

$tees=array('RedCrew','BlueSlim','GreyV');
$sizes=array('S','M','L','XL');
foreach ($tees as $t)
{
    foreach ($sizes as $s)
    {
        print "sum( if ((TShirt1='$t' AND TShirt1Size='$s') OR (TShirt2='$t' AND TShirt2Size='$s'), if ( (TShirt1='$t'  AND TShirt1Size='$s') AND (TShirt2='$t' AND TShirt2Size='$s'), 2, 1), 0)) AS '$t $s',<br>";
    }
}

回答の正確な書式設定を提供するわけではありませんが、知っておくべきことを教えてくれます!

于 2013-08-30T21:30:53.043 に答える