Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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 - Fatal编程技术网

Sql 从“选择”内的子查询中选择列?

Sql 从“选择”内的子查询中选择列?,sql,Sql,如何将Attr1从子查询选择到父查询?我尝试使用Average.Attr1,但不起作用 不是单一的组功能 您可以向这些聚合函数添加别名,以便在外部查询中使用它们 SELECT SUM(avg_attr1), SUM(avg_attr2), SUM(avg_attr3), 0 FROM {Report}, ( SELECT AVG(Report.Attr1) as avg_attr1, AVG(Report.Attr2

如何将Attr1从子查询选择到父查询?我尝试使用Average.Attr1,但不起作用

不是单一的组功能


您可以向这些聚合函数添加别名,以便在外部查询中使用它们

SELECT SUM(avg_attr1), 
       SUM(avg_attr2), 
       SUM(avg_attr3), 
       0
FROM {Report}, 
(
    SELECT AVG(Report.Attr1) as avg_attr1,
           AVG(Report.Attr2) as avg_attr2,
           AVG(Report.Attr3) as avg_attr3
    ...
或者,如果您只是想限制它们,那么您可以将HAVING子句与GROUP BY一起使用

...
      GROUP BY Report.Attr1, Report.Attr2, Report.Attr3
      HAVING AVG(Report.Attr1) > {SomeNumber}
) Average
...

我不确定这是否是您想要的,但我通过以下方式实现:

WITH REPORT (STARTDATE,ENDDATE,DATE1,ATTR1,ATTR2,ATTR3)AS(
SELECT DATE '2018-01-01',DATE '2018-02-01',DATE '2018-01-11', 1,2,3 FROM DUAL UNION ALL
SELECT DATE '2018-01-01',DATE '2018-02-01',DATE '2018-01-11',1,2,3 FROM DUAL UNION ALL
select date '2018-01-01',DATE '2018-02-01',DATE '2018-01-11',1,2,3 from dual 
)

SELECT SUM(Report.Attr1), 
       SUM(Report.Attr2), 
       SUM(REPORT.ATTR3), 
       0,
       average.a,average.b,average.c
FROM REPORT, 
(
    SELECT AVG(REPORT.ATTR1) A,
           AVG(REPORT.ATTR2) B ,
           AVG(Report.Attr3) c
    FROM Report
    WHERE 
        STARTDATE <= REPORT.DATE1 AND
        Report.Date1 <= EndDate
    GROUP BY Report.Attr1, Report.Attr2, Report.Attr3
) Average
WHERE 
    STARTDATE <= REPORT.DATE1 AND
    REPORT.DATE1 <= ENDDATE
    GROUP BY 0,
       average.a,average.b,average.c

您可以通过提供别名来引用它们。现在,如果您说Average.attr,您将得到Report.Attr1对应的值


AVGReport.Attr]有一个]而不是1请添加一些示例数据oops谢谢,在我发布此问题之前,我的编辑是错误的。但这不是错误的原因。在表中有一个名为Date的列可能非常危险,因为它是一个保留字。内部select未连接到外部select,使其成为笛卡尔连接。也许这不是你想要的。
WITH REPORT (STARTDATE,ENDDATE,DATE1,ATTR1,ATTR2,ATTR3)AS(
SELECT DATE '2018-01-01',DATE '2018-02-01',DATE '2018-01-11', 1,2,3 FROM DUAL UNION ALL
SELECT DATE '2018-01-01',DATE '2018-02-01',DATE '2018-01-11',1,2,3 FROM DUAL UNION ALL
select date '2018-01-01',DATE '2018-02-01',DATE '2018-01-11',1,2,3 from dual 
)

SELECT SUM(Report.Attr1), 
       SUM(Report.Attr2), 
       SUM(REPORT.ATTR3), 
       0,
       average.a,average.b,average.c
FROM REPORT, 
(
    SELECT AVG(REPORT.ATTR1) A,
           AVG(REPORT.ATTR2) B ,
           AVG(Report.Attr3) c
    FROM Report
    WHERE 
        STARTDATE <= REPORT.DATE1 AND
        Report.Date1 <= EndDate
    GROUP BY Report.Attr1, Report.Attr2, Report.Attr3
) Average
WHERE 
    STARTDATE <= REPORT.DATE1 AND
    REPORT.DATE1 <= ENDDATE
    GROUP BY 0,
       average.a,average.b,average.c
SELECT SUM(Report.Attr1), 
           SUM(Report.Attr2), 
           SUM(Report.Attr3), 
           0,
           Average.attr
    FROM {Report}, 
    (
        SELECT AVG(Report.Attr1) as attr,
               AVG(Report.Attr2),
               AVG(Report.Attr3)
        FROM Report
        WHERE 
            StartDate <= Report.Date AND
            Report.Date <= EndDate
        GROUP BY Report.Attr1, Report.Attr2, Report.Attr3
    ) Average
    WHERE 
        StartDate <= Report.Date AND
        Report.Date <= EndDate