0

亲切的问候。

我对如何在 MySQL 中实现查询有疑问,抱歉太长了。

现在:我的网站有(不同项目和数量的)产品包。

项目存储在名为ItemTbl的表中,有 2 个字段(IdItem 和 NameItem)

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'); 

包存储在名为PackTbl的表中,有 2 个字段(IdPack 和 NamePack)

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'); 

站点存储在名为SiteTbl的表中,有 2 个字段(IdSite 和 NameSite)

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'); 

这些包使用名为ItemPackTbl的表与项目相关,该表具有 3 个字段(IdItem、IdPack、QtyIP)

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'); 

这些站点使用名为PackSiteTbl的表与包相关,该表具有 3 个字段(IdPack、IdSite、QtyPS)

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'); 

我想做两件事:

  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 回答