2016-05-10 12 views
0

私はProductsとProductsという名前のテーブルを持っています。私は注文の価格のようなものを手に入れたい。だから私は5ペアの "Headphonesv1"(名前ではないので名前は変わるかもしれないのでIDと比較する)、2パックの "GumOrbit"、7パックの "crisps"が必要だとしましょう。ヘッドホンv1の価格は10 $、ガム1 $、チップ2 $です。ですから、私が得なければならない答えは、請求書ID、請求日、および合計金額= 66です。私の質問は、複数の計算をどのように行うのですか?SQL異なるIDを持つ乗算を3回使用

SELECT Products.billID, Products.Date, (ProductsDetails.Price * 5 WHERE ProductsDetails.name LIKE 'Headphonesv1') 
FROM Products INNER JOIN ProductsDetails ON Products.billdID = ProductsDetails.billID 

はまた、(SELECT内部を挿入しようとしている)が、その後、私は取得値が間違っているとより多くの内部はdoesnの内側に参加1を作成:私は少なくとも一つとしようとしてきたが、私は構文エラーを取得するコード約束しているようです

+0

あなたは、私が唯一の1行を取得したいあなたの出力は次のようになります?..あなたが別の行にまたはクロス集計形式 – JamieD77

+0

で各アイテムの価格を確認するには欠けているものの一例を示すことができます注文されたすべての製品の総コストを印刷するようにしてください – TesteroniPeperoni

+0

正直なところ、完全な注文をqtyで独自のテーブルに保存し、IDごとに各アイテムのコストに戻してください。次に、各注文について合計費用を合計します。 – DiscipleMichael

答えて

0

複数のアイテムの合計コストを確認したい場合は、集計とケース式を使用してSUMを取得できます。あなたが何かを追加cart(cartID int/*,more info*/)cartItems(cartID int /*FK*/, item varchar(50),qty int)を:

SELECT Products.billID, 
     Products.Date, 
     SUM(CASE WHEN ProductsDetails.name LIKE 'Headphonesv1' THEN ProductsDetails.Price * 5 
       WHEN ProductsDetails.name LIKE 'GumOrbit' THEN ProductsDetails.Price * 2 
       WHEN ProductsDetails.name LIKE 'crisps' THEN ProductsDetails.Price * 7 
      END) TotalCost 
FROM Products 
     INNER JOIN ProductsDetails ON Products.billdID = ProductsDetails.billID 
GROUP BY Products.billID, 
     Products.Date 

これは非常に難しいあなたはおそらく別の2つのテーブルを持っている

+0

ちょうど好奇心が強い、最初に、そのようなCASE ... WHEN ... THEN ... WHEN ... THEN ... WHEN ... THEN ... END'構造を見てください。それは 'IF ... ELSE IF ... ELSE IF ...'のように動作しますか? – Webeng

+0

これを試してみよう! Microsoftへのアクセスのためにそれを変換する必要があります – TesteroniPeperoni

+0

ありがとう!それは – TesteroniPeperoni

0

あなたの前のコードにはいくつかのsynax errorがあります。間違った場所で括弧を閉じ、FROM ...句はWHERE ...句の前にする必要があります。コードを次のように変更してください:

SELECT Products.billID, Products.Date, (ProductsDetails.Price * 5) 
FROM Products INNER JOIN ProductsDetails ON Products.billdID = ProductsDetails.billID 
WHERE ProductsDetails.name LIKE 'Headphonesv1' 

これが今動作するかどうか教えてください。


編集:

OPは、複数の製品のために、その情報を取得する方法を要求しました。その場合、明細書を次のように切り替えることができます。

SELECT SUM(Cost) 
FROM (
    SELECT Products.billID, Products.Date, 
     (ProductsDetails.Price * 
      (CASE WHEN ProductsDetails.name='Headphonesv1' THEN 5 ELSE 
       CASE WHEN ProductsDetails.name='GumOrbit' THEN 7 ELSE 0 END 
      END) 
     ) AS Cost 
    FROM Products INNER JOIN ProductsDetails ON Products.billdID = ProductsDetails.billID 
    WHERE (ProductsDetails.name = 'Headphonesv1') OR (ProductsDetails.name = 'GumOrbit') 
) 

さらに商品を追加できます。

+0

それはすべての良い動作します。もう1つの製品が必要な場合はどうすればいいですか?その価格は異なっているので、私はそれを別々に計算してから前のものに加えて合計を得る必要があります – TesteroniPeperoni

+0

また、この場合は 'LIKE 'Headphonesv1''というコードを使用する必要はありません。 = 'Headphonesv1''。 'LIKE '%Headphones%''のようにして、文字列内の特定の文字列を探したいときは、通常 'LIKE'を使います。 – Webeng

+0

@TesteroniPeperoni私は自分の答え、1瞬間を更新します。 – Webeng

0

かかわらず、多くの使用を提供するためにコード化されたようです。最後に、

select sum(pd.price * ci.qty) tot 
FROM Products p 
INNER JOIN ProductsDetails pd ON p.billdID = pd.billID 
inner join cartItems ci on ci.item = pd.name 
inner join cart c on c.cartID = ci.cartID 
where c.cartID = 123456 
関連する問題