0

我正在尝试将最终查询的 with 子句中的查询输出作为 csv 或某种文本文件。我只有查询访问权限,不允许为此数据库创建表。我有一组查询对数据集进行一些计算,另一组查询对前一组进行计算,另一组对最后一组进行计算。我不想将所有这些作为三个单独的查询运行,因为前两个查询的结果实际上在最后一个查询中。

WITH
    Q1 AS(
        SELECT col1, col2, col3, col4, col5, col6, col7
        FROM table1
    ),
    Q2 AS(
        SELECT AVG(col1) as col1Avg, MAX(col1) as col1Max, col2, col3,col4
        FROm Q1
        GROUP BY col2, col3, col4
    )
SELECT 
    AVG(col1AVG), col3
FROM
    Q2
GROUP BY col3

我希望 Q1、Q2 和最终选择语句的结果最好是 3 个 csv 文件,但我可以将所有这些都放在一个 csv 文件中。这可能吗?

谢谢!

编辑:为了澄清,查询中的列非常不同。我肯定会从我的第一个查询中提取比第二个查询更多的列。我对上面的代码进行了一些编辑,以使其更加清晰。

4

1 回答 1

1

要将所有结果组合在一起,您可以使用 UNION ALL,但列的数量和数据类型必须匹配。

select col1, col2, col2
from   blah
union all
select col1, col2, col2
from   blah2
union all
... etc

您当然可以在其中参考 CTE ......

with
  cte_1 as (
    select ... from ...),
  cte_2 as (
    select ... from ... cte_1),
  cte_3 as (
    select ... from ... cte_2)
select col1, col2, col2
from   cte_1
union all
select col1, col2, col2
from   cte_2
union all
select col1, col2, col2
from   cte_3

如果您的最终输出是 csv,那么看起来您有多种行格式——校验和?如果是这样,在您联合在一起的查询中,您可能希望将每个查询中的所有列组合成一个字符串......

with
  cte_1 as (
    select ... from ...),
  cte_2 as (
    select ... from ... cte_1),
  cte_3 as (
    select ... from ... cte_2)
select col1||','||col2||','||col2
from   cte_1
union all
select col1||','||col2
from   cte_2
union all
select col1
from   cte_3
于 2013-05-10T13:28:43.273 回答