将多个表插入一个表中

时间:2014-05-19 02:25:50

标签: sql oracle11g

 Http://i.stack.imgur.com/z0fSP.png
 Http://i.stack.imgur.com/Nd3nB.png
 Http://i.stack.imgur.com/5qtRh.png
 Http://i.stack.imgur.com/01PVc.png
 Http://i.stack.imgur.com/wvibY.png



 INSERT INTO  OrderArchive                               

    (OrderNumber,OrderDate,StockItem,Quantity,UnitPrice,SalesRep,Customer,ArchiveDate)     
    SELECT "ORDER".OrderNo,
    "ORDER".OrderDate,
    Stock.StockNo||' '||Stock.StockDesc,
    Orderline.Quantity,
    Orderline.UnitPrice,
    Person.FirstName||' '||Person.Surname,
    Person.FirstName||' '||Person.Surname,
    OrderArchive.ArchiveDate
    FROM "ORDER"
    INNER JOIN Stock
        ON Stock.StockNo||' '||Stock.StockDesc = OrderAchive.StockItem
    INNER JOIN Orderline
        ON Orderline.Quantity = OrderArchive.Quantity
    INNER JOIN Orderline
        ON Orderline.UnitPrice = OrderArchive.UnitPrice
    INNER JOIN Person
        ON Person.FirstName||' '||Person.Surname = OrderArchive.SalesRep
    INNER JOIN Person       
        ON Person.FirstName||' '||Person.Surname = OrderArchive.Customer 
    WHERE "ORDER".OrderDate  < DATEADD('M',6,SYSDATE); 

我试图先解决它,但是无法管理它....我正在尝试将超过6个月的订单移至OrderArchive ... OrderArchive有OrderNo&amp;订单日期来自&#34; ORDER&#34;表库存项目是StockID和Stockdesc的组合,来自库存表数量和单位成本来自订单表salesrep,客户来自人员表,而datearchived是日期的sysdate订单已存档

3 个答案:

答案 0 :(得分:0)

为此,您需要一种方法将Person记录加入TableOrder记录。此代码假定您在PersonID表上有TableOrder。您可以在CustomerID表格中使用SalesPersonIDTableOrder或类似内容将其加入Person表格,但我不清楚。

INSERT INTO ArchiveTable (col_1,col_2,col_3,col_4 etc)
    SELECT
        o.OrderNo,
        o.OrderDate,
        p.StockNo||' '||p.StockDesc,
        p.FirstName||' '|| p.Surname
    FROM TableOrder o
        INNER JOIN Person p
            ON p.PersonID = o.PersonID
    WHERE o.orderdate < DATEADD('M',12,SYSDATE)

答案 1 :(得分:0)

我认为您没有从查询中获得预期的输出,因为您同时加入Person表同时包含SalesRepCustomer名称。因此,只有订单具有SalesRepCustomer的相同名称时,您才能获得任何数据。因此,我为Person表创建了不同的表别名,如下所示:

INSERT INTO  OrderArchive
    (OrderNumber,OrderDate,StockItem,Quantity,UnitPrice,SalesRep,Customer,ArchiveDate)     
SELECT 
    "ORDER".OrderNo,
    "ORDER".OrderDate,
    Stock.StockNo||' '||Stock.StockDesc,
    Orderline.Quantity,
    Orderline.UnitPrice,
    Person_SR.FirstName||' '||Person_SR.Surname,
    Person_C.FirstName||' '||Person_C.Surname,
    OrderArchive.ArchiveDate
FROM "ORDER"
INNER JOIN Stock
ON Stock.StockNo||' '||Stock.StockDesc = OrderAchive.StockItem
INNER JOIN Orderline
ON Orderline.Quantity = OrderArchive.Quantity
INNER JOIN Orderline
ON Orderline.UnitPrice = OrderArchive.UnitPrice
INNER JOIN Person Person_SR
ON Person_SR.FirstName||' '||Person_SR.Surname = OrderArchive.SalesRep
INNER JOIN Person Person_C       
ON Person_C.FirstName||' '||Person_C.Surname = OrderArchive.Customer 
WHERE "ORDER".OrderDate  < DATEADD('M',6,SYSDATE); 

答案 2 :(得分:0)

INSERT INTO OrderArchive(OrderNumber,OrderDate,StockItem,Quantity,UnitPrice,SalesRep,Customer) 选择“订购”。订单没有,                 “ORDER” .OrderDate,                 Stock.StockNo ||' “|| Stock.StockDesc,                 Orderline.Quantity,                 Stock.UnitCost,                 “ORDER” .SalesRepID,                 Person.FirstName ||” “|| Person.Surname  来自内部联系人     (“订购”左边加入       (订单内联股票       在Orderline.StockID = Stock.StockNo)       ON “ORDER” .OrderNo = OrderLine.OrderNo)       ON Person.PersonID =“ORDER”.CustomerID       在哪里“订购”。订单日期&lt; ADD_MONTHS(SYSDATE,-6)     订购“订购”。订单编号;

SELECT * FROM OrderArchive;

几乎完成我只需要让SalesRepID说出salesrep的姓氏,但大部分已经完成:)