Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 组合三个查询的结果并在另一个查询中使用它们_Sql_Oracle_Oracle11g - Fatal编程技术网

Sql 组合三个查询的结果并在另一个查询中使用它们

Sql 组合三个查询的结果并在另一个查询中使用它们,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我想使用以下三个查询: 第一个问题: SELECT AMICOS.PNRREG.PN, Max(AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE) AS lastissue FROM AMICOS.HISTORYSTOCKFLOAT INNER JOIN AMICOS.PNRREG ON AMICOS.HISTORYSTOCKFLOAT.PARTID = AMICOS.PNRREG.PARTID WHERE (((AMICOS

我想使用以下三个查询:

第一个问题:

SELECT 
    AMICOS.PNRREG.PN, Max(AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE) AS lastissue 
FROM 
    AMICOS.HISTORYSTOCKFLOAT 
INNER JOIN 
    AMICOS.PNRREG ON AMICOS.HISTORYSTOCKFLOAT.PARTID = AMICOS.PNRREG.PARTID 
WHERE 
    (((AMICOS.HISTORYSTOCKFLOAT.ACTION)='ISSUE') AND    
    ((AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE)<to_date('31032019','DDMMYYYY')+1)) 
GROUP BY 
    AMICOS.PNRREG.PN;
我尝试了UNION,JOIN将这些查询放在一起,从最后一个查询中得到一个结果,它依赖于其他三个查询

当我有前三个查询的预定义查询时,它在MS Access上工作。但它不适用于Oracle SQL开发人员查询工具

如何实现这一点?

看起来像是CTE公共表表达式,即WITH factoring子句可能会有所帮助。大概是这样的:

with 
  first  as (select pn, ... from ...),
  second as (select pn, ... from ...),
  third  as (select pn, ... from ...)
-- now, join them
select f.pn, s.some_column, t.some_other_column
from first f join second s on s.pn = f.pn
join third t on t.pn = f.pn

您可以使用With或以下选项

SELECT 
    AMICOS.PNRREG.PN, 
    AMICOS.IRCABCCAT.ABC_CATEGORY, 
    AMICOS.IRC.PRIMUTILISATION, 
    AMICOS.PNRREG.DESCRIPTION, 
    AMICOS.HISTORYSTOCKFLOAT.ACCOUNTNO, 
    AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE, 
    AMICOS.HISTORYSTOCKFLOAT.STOCK_FLOAT, 
    AMICOS.HISTORYSTOCKFLOAT.STOCK_PRICE, 
    AMICOS.HISTORYSTOCKFLOAT.STOCKVALUE, 
    lastpurchase.lastpurchase, 
    lastissue.lastissue, 
    lastissuehistory.lastissuehistory
FROM 
    AMICOS.PNRREG

LEFT JOIN (SELECT 
AMICOS.PNRREG.PN, 
Max(AMICOS.HISTORY.HISTORYDATE) AS lastissuehistory
FROM 
    AMICOS.HISTORY 
    INNER JOIN AMICOS.PNRREG ON AMICOS.HISTORY.PARTID = AMICOS.PNRREG.PARTID
WHERE (((AMICOS.HISTORY.HISTORYACTION)='ISSUE') AND ((AMICOS.HISTORY.HISTORYDATE)<to_date('31032019','DDMMYYYY')+1))
GROUP BY AMICOS.PNRREG.PN) lastissuehistory ON AMICOS.PNRREG.PN = lastissuehistory.PN 

LEFT JOIN (SELECT 
AMICOS.PNRREG.PN, 
Max(AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE) AS lastissue 
FROM 
    AMICOS.HISTORYSTOCKFLOAT 
    INNER JOIN AMICOS.PNRREG ON AMICOS.HISTORYSTOCKFLOAT.PARTID = AMICOS.PNRREG.PARTID 
WHERE 
(((AMICOS.HISTORYSTOCKFLOAT.ACTION)='ISSUE') AND ((AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE)<to_date('31032019','DDMMYYYY')+1)) 
GROUP BY AMICOS.PNRREG.PN)lastissue ON AMICOS.PNRREG.PN = lastissue.PN

LEFT JOIN (SELECT 
    AMICOS.PNRREG.PN, 
    Max(AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE) AS lastpurchase
FROM 
    AMICOS.HISTORYSTOCKFLOAT 
    INNER JOIN AMICOS.PNRREG ON AMICOS.HISTORYSTOCKFLOAT.PARTID = AMICOS.PNRREG.PARTID
WHERE (((AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE)<to_date('31032019','DDMMYYYY')+1))
GROUP BY AMICOS.PNRREG.PN, AMICOS.HISTORYSTOCKFLOAT.ACTION
HAVING (((AMICOS.HISTORYSTOCKFLOAT.ACTION)='PURCHASE'))) lastpurchase ON AMICOS.PNRREG.PN = lastpurchase.PN
@小脚 我试过这样的方法:

WITH
first as (SELECT AMICOS.PNRREG.PN, Max(AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE) AS lastissue FROM AMICOS.HISTORYSTOCKFLOAT INNER JOIN AMICOS.PNRREG ON                   AMICOS.HISTORYSTOCKFLOAT.PARTID = AMICOS.PNRREG.PARTID WHERE (((AMICOS.HISTORYSTOCKFLOAT.ACTION)='ISSUE') AND                                           ((AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE)<to_date('31032019','DDMMYYYY')+1)) GROUP BY AMICOS.PNRREG.PN),
second as (SELECT AMICOS.PNRREG.PN, Max(AMICOS.HISTORY.HISTORYDATE) AS lastissuehistory
       FROM AMICOS.HISTORY INNER JOIN AMICOS.PNRREG ON AMICOS.HISTORY.PARTID = AMICOS.PNRREG.PARTID
       WHERE (((AMICOS.HISTORY.HISTORYACTION)='ISSUE') AND ((AMICOS.HISTORY.HISTORYDATE)<to_date('31032019','DDMMYYYY')+1))
       GROUP BY AMICOS.PNRREG.PN),
third as (SELECT AMICOS.PNRREG.PN, Max(AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE) AS lastpurchase
FROM AMICOS.HISTORYSTOCKFLOAT INNER JOIN AMICOS.PNRREG ON AMICOS.HISTORYSTOCKFLOAT.PARTID = AMICOS.PNRREG.PARTID
WHERE (((AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE)<to_date('31032019','DDMMYYYY')+1))
GROUP BY AMICOS.PNRREG.PN, AMICOS.HISTORYSTOCKFLOAT.ACTION
HAVING (((AMICOS.HISTORYSTOCKFLOAT.ACTION)='PURCHASE')))
SELECT AMICOS.PNRREG.PN, AMICOS.IRCABCCAT.ABC_CATEGORY, AMICOS.IRC.PRIMUTILISATION,
AMICOS.PNRREG.DESCRIPTION, AMICOS.HISTORYSTOCKFLOAT.ACCOUNTNO,
AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE, AMICOS.HISTORYSTOCKFLOAT.STOCK_FLOAT,
AMICOS.HISTORYSTOCKFLOAT.STOCK_PRICE, AMICOS.HISTORYSTOCKFLOAT.STOCKVALUE,
lastpurchase.lastpurchase, lastissue.lastissue, lastissuehistory.lastissuehistory
FROM ((AMICOS.PNRREG LEFT JOIN lastpurchase ON AMICOS.PNRREG.PN = lastpurchase.PN
LEFT JOIN lastissue ON AMICOS.PNRREG.PN = lastissue.PN) LEFT JOIN lastissuehistory ON
AMICOS.PNRREG.PN = lastissuehistory.PN;
但它总是告诉我选择列表与分组不一致;通过条款将集团修改为:AMICOS.PNRREG.PN、AMICOS.HISTORYSTOCKFLOAT.ACTION、MaxAMICOS.HISTORYSTOCKFLOAT.HISTORYDATE

问候
Erneraq

在本指南的帮助下,我成功地完成了这项工作:

熊凯瑟琳的建议

问候


Erneraq

这有错误,它找不到表:AMICOS.PNRREG.PN,AMICOS.ircabcat.ABC_类别,AMICOS.IRC.primusization,AMICOS.PNRREG.DESCRIPTION,AMICOS.historycostockfloat.ACCOUNTNO,AMICOS.historycostockfloat.historycdate,AMICOS.historycostockfloat.STOCK_FLOAT,AMICOS.HISTORYSTOCKFLOAT.STOCK\u价格,AMICOS.HISTORYSTOCKFLOAT.STOCKVALUE。。但我会试试这个。考虑到Erneraqtry要替换三个左连接字段AMICOS.PNRREG.PN,您在historystockfloat表中有PN字段吗?如果是,则更新它并更新组
with 
  first  as (select pn, ... from ...),
  second as (select pn, ... from ...),
  third  as (select pn, ... from ...)
-- now, join them
select f.pn, s.some_column, t.some_other_column
from first f join second s on s.pn = f.pn
join third t on t.pn = f.pn
SELECT 
    AMICOS.PNRREG.PN, 
    AMICOS.IRCABCCAT.ABC_CATEGORY, 
    AMICOS.IRC.PRIMUTILISATION, 
    AMICOS.PNRREG.DESCRIPTION, 
    AMICOS.HISTORYSTOCKFLOAT.ACCOUNTNO, 
    AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE, 
    AMICOS.HISTORYSTOCKFLOAT.STOCK_FLOAT, 
    AMICOS.HISTORYSTOCKFLOAT.STOCK_PRICE, 
    AMICOS.HISTORYSTOCKFLOAT.STOCKVALUE, 
    lastpurchase.lastpurchase, 
    lastissue.lastissue, 
    lastissuehistory.lastissuehistory
FROM 
    AMICOS.PNRREG

LEFT JOIN (SELECT 
AMICOS.PNRREG.PN, 
Max(AMICOS.HISTORY.HISTORYDATE) AS lastissuehistory
FROM 
    AMICOS.HISTORY 
    INNER JOIN AMICOS.PNRREG ON AMICOS.HISTORY.PARTID = AMICOS.PNRREG.PARTID
WHERE (((AMICOS.HISTORY.HISTORYACTION)='ISSUE') AND ((AMICOS.HISTORY.HISTORYDATE)<to_date('31032019','DDMMYYYY')+1))
GROUP BY AMICOS.PNRREG.PN) lastissuehistory ON AMICOS.PNRREG.PN = lastissuehistory.PN 

LEFT JOIN (SELECT 
AMICOS.PNRREG.PN, 
Max(AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE) AS lastissue 
FROM 
    AMICOS.HISTORYSTOCKFLOAT 
    INNER JOIN AMICOS.PNRREG ON AMICOS.HISTORYSTOCKFLOAT.PARTID = AMICOS.PNRREG.PARTID 
WHERE 
(((AMICOS.HISTORYSTOCKFLOAT.ACTION)='ISSUE') AND ((AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE)<to_date('31032019','DDMMYYYY')+1)) 
GROUP BY AMICOS.PNRREG.PN)lastissue ON AMICOS.PNRREG.PN = lastissue.PN

LEFT JOIN (SELECT 
    AMICOS.PNRREG.PN, 
    Max(AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE) AS lastpurchase
FROM 
    AMICOS.HISTORYSTOCKFLOAT 
    INNER JOIN AMICOS.PNRREG ON AMICOS.HISTORYSTOCKFLOAT.PARTID = AMICOS.PNRREG.PARTID
WHERE (((AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE)<to_date('31032019','DDMMYYYY')+1))
GROUP BY AMICOS.PNRREG.PN, AMICOS.HISTORYSTOCKFLOAT.ACTION
HAVING (((AMICOS.HISTORYSTOCKFLOAT.ACTION)='PURCHASE'))) lastpurchase ON AMICOS.PNRREG.PN = lastpurchase.PN
WITH
first as (SELECT AMICOS.PNRREG.PN, Max(AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE) AS lastissue FROM AMICOS.HISTORYSTOCKFLOAT INNER JOIN AMICOS.PNRREG ON                   AMICOS.HISTORYSTOCKFLOAT.PARTID = AMICOS.PNRREG.PARTID WHERE (((AMICOS.HISTORYSTOCKFLOAT.ACTION)='ISSUE') AND                                           ((AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE)<to_date('31032019','DDMMYYYY')+1)) GROUP BY AMICOS.PNRREG.PN),
second as (SELECT AMICOS.PNRREG.PN, Max(AMICOS.HISTORY.HISTORYDATE) AS lastissuehistory
       FROM AMICOS.HISTORY INNER JOIN AMICOS.PNRREG ON AMICOS.HISTORY.PARTID = AMICOS.PNRREG.PARTID
       WHERE (((AMICOS.HISTORY.HISTORYACTION)='ISSUE') AND ((AMICOS.HISTORY.HISTORYDATE)<to_date('31032019','DDMMYYYY')+1))
       GROUP BY AMICOS.PNRREG.PN),
third as (SELECT AMICOS.PNRREG.PN, Max(AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE) AS lastpurchase
FROM AMICOS.HISTORYSTOCKFLOAT INNER JOIN AMICOS.PNRREG ON AMICOS.HISTORYSTOCKFLOAT.PARTID = AMICOS.PNRREG.PARTID
WHERE (((AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE)<to_date('31032019','DDMMYYYY')+1))
GROUP BY AMICOS.PNRREG.PN, AMICOS.HISTORYSTOCKFLOAT.ACTION
HAVING (((AMICOS.HISTORYSTOCKFLOAT.ACTION)='PURCHASE')))
SELECT AMICOS.PNRREG.PN, AMICOS.IRCABCCAT.ABC_CATEGORY, AMICOS.IRC.PRIMUTILISATION,
AMICOS.PNRREG.DESCRIPTION, AMICOS.HISTORYSTOCKFLOAT.ACCOUNTNO,
AMICOS.HISTORYSTOCKFLOAT.HISTORYDATE, AMICOS.HISTORYSTOCKFLOAT.STOCK_FLOAT,
AMICOS.HISTORYSTOCKFLOAT.STOCK_PRICE, AMICOS.HISTORYSTOCKFLOAT.STOCKVALUE,
lastpurchase.lastpurchase, lastissue.lastissue, lastissuehistory.lastissuehistory
FROM ((AMICOS.PNRREG LEFT JOIN lastpurchase ON AMICOS.PNRREG.PN = lastpurchase.PN
LEFT JOIN lastissue ON AMICOS.PNRREG.PN = lastissue.PN) LEFT JOIN lastissuehistory ON
AMICOS.PNRREG.PN = lastissuehistory.PN;