0

心のこもったご挨拶。

MySQL でクエリを実装する方法について疑問があります。申し訳ありませんが長すぎます。

今:私は、(さまざまなアイテムと数量の)製品のパックを持っているサイトを持っています.

アイテムは、2 つのフィールド (IdItem と NameItem) を持つItemTblという名前のテーブルに格納されます。

CREATE TABLE ItemTbl ( 
IdItem VARCHAR(16) UNIQUE NOT NULL, 
NameItem VARCHAR(32) NOT NULL 
);
INSERT INTO ItemTbl (IdItem, NameItem) VALUES 
('Item00','Item 00'), 
('Item01','Item 01'), 
('Item02','Item 02'), 
('Item03','Item 03'), 
('Item04','Item 04'), 
('Item05','Item 05'); 

パックは、2 つのフィールド (IdPack と NamePack) を持つPackTblという名前のテーブルに格納されます。

CREATE TABLE PackTbl ( 
IdPack VARCHAR(16) UNIQUE NOT NULL, 
NamePack VARCHAR(32) NOT NULL 
); 
INSERT INTO PackTbl (IdPack, NamePack) VALUES 
('Pack00','Pack 00'), 
('Pack01','Pack 01'), 
('Pack02','Pack 02'), 
('Pack03','Pack 03'); 

サイトは、2 つのフィールド (IdSite と NameSite) を持つSiteTblという名前のテーブルに格納されます。

CREATE TABLE SiteTbl ( 
IdSite VARCHAR(16) UNIQUE NOT NULL, 
NameSite VARCHAR(32) NOT NULL 
);
INSERT INTO SiteTbl (IdSite, NameSite) VALUES 
('Site00','Site 00'), 
('Site01','Site 01'); 

パックは、3 つのフィールド (IdItem、IdPack、QtyIP) を持つItemPackTblという名前のテーブルを使用してアイテムに関連付けられます。

CREATE TABLE ItemPackTbl ( 
IdItem VARCHAR(16) NOT NULL, 
IdPack VARCHAR(16) NOT NULL, 
QtyIP INT NOT NULL 
);
INSERT INTO ItemPackTbl (IdItem, IdPack, QtyIP) VALUES 
('Item00', 'Pack00', '90'), 
('Item01', 'Pack00', '81'), 
('Item02', 'Pack00', '72'), 
('Item03', 'Pack01', '63'), 
('Item04', 'Pack01', '54'), 
('Item05', 'Pack01', '50'), 
('Item01', 'Pack02', '61'), 
('Item04', 'Pack02', '72'), 
('Item03', 'Pack03', '83'), 
('Item02', 'Pack03', '94'); 

サイトは、3 つのフィールド (IdPack、IdSite、QtyPS) を持つPackSiteTblという名前のテーブルを使用してパックに関連付けられています。

CREATE TABLE PackSiteTbl ( 
IdPack VARCHAR(16) NOT NULL, 
IdSite VARCHAR(16) NOT NULL, 
QtyPS INT NOT NULL 
);
INSERT INTO PackSiteTbl (IdPack, IdSite, QtyPS) VALUES 
('Pack00', 'Site00', '5'), 
('Pack03', 'Site00', '4'), 
('Pack01', 'Site01', '8'), 
('Pack02', 'Site01', '1'); 

これで、 QuotTblという名前のテーブルがあり、価格と日付を含むアイテムのみの異なる見積もり (パックまたはサイトが計算されるため) が含まれています。

CREATE TABLE QuotTbl ( 
IdQuot VARCHAR(16) UNIQUE NOT NULL, 
IdItem VARCHAR(16) NOT NULL, 
QtCost INT NOT NULL, 
QtDate DATE NOT NULL 
);
INSERT INTO QuotTbl (IdQuot, IdItem, QtCost, QtDate) VALUES 
('Quot00', 'Item00', '90', '1983-12-30'), 
('Quot01', 'Item00', '72', '2004-09-09'), 
('Quot02', 'Item01', '63', '2013-02-01'), 
('Quot03', 'Item01', '50', '2012-05-09'), 
('Quot04', 'Item02', '61', '1983-12-30'), 
('Quot05', 'Item02', '27', '2004-09-09'), 
('Quot06', 'Item03', '38', '2013-02-01'), 
('Quot07', 'Item03', '49', '2012-05-09'), 
('Quot08', 'Item04', '90', '1983-12-30'), 
('Quot09', 'Item04', '72', '2004-09-09'), 
('Quot10', 'Item05', '63', '2013-02-01'), 
('Quot11', 'Item05', '50', '2012-05-01'); 

私は2つのことをしたい:

  1. アイテムの履歴書を含む SiteTblのエントリのリストを取得するためのクエリが何であるかを知る必要があります(追加を行います)。

    Site00には次のものがあります。

    ItemId, Qty
    Item00, 450
    Item01, 405
    Item02, 736
    Item03, 332
    

    Site01には次のものがあります。

    ItemId, Qty
    Item01, 61
    Item03, 504
    Item04, 504
    Item05, 400
    
  2. QuotTbl テーブルとすべてのアイテム リストに従って、最も安い (または最新の) 見積もりを見つけます。

    Site00 最 :

    ItemId, Qty Cost    Total   
    Item00, 450 72      32400
    Item01, 405 50      20250
    Item02, 736 27      19872
    Item03, 332 38      12616
    

    Site01 最 :

    ItemId, Qty Cost    Total   
    Item01, 61  50      3050
    Item03, 504 38      19152
    Item04, 504 72      36288
    Item05, 400 50      20000
    

    Site00 最新:

    ItemId, Qty Cost    Total   
    Item00, 450 72      32400
    Item01, 405 63      25515
    Item02, 736 27      19872
    Item03, 332 38      12616
    

    Site01 最新:

    ItemId, Qty Cost    Total   
    Item01, 61  63      3843
    Item03, 504 38      19152
    Item04, 504 72      36288
    Item05, 400 63      25200
    

貴重なご協力ありがとうございます。

よろしくお願いします。

4

1 に答える 1

0

最初の質問:

SELECT c.IdItem,b.IdSite, SUM(c.QtyIP*b.QtyPS) Multiply
FROM PackSiteTbl b 
LEFT JOIN ItemPackTbl c
ON b.IdPack = c.IdPack 
GROUP BY b.IdSite, c.IdItem;

最安

SELECT * FROM (SELECT IdQuot, IdItem, QtCost Cheapest 
FROM QuotTbl
ORDER BY QtCost ASC) d
GROUP BY IdItem;

最新

SELECT * FROM (SELECT IdQuot, IdItem, QtCost Newest
FROM QuotTbl
ORDER BY QtDate DESC) d
GROUP BY IdItem;

この回答を確認してください:http://www.sqlfiddle.com/#!2/444b7/66

于 2013-04-18T03:39:26.183 に答える