尝试运行查询时,teradata中出现错误3807

时间:2020-07-09 09:52:48

标签: sql teradata

TERADATA数据库

当我进行左联接时,我将获得更多的返回行。我的易失性表中的基本人口为559,157行。而我想做的只是从基本人口收益中获得559,157行。但是运行此查询后:

SELECT distinct a.*, b.column1, b.column2, b.column3, b.column4, b.column5, b.column6, c.column3, SUM(c.column3) AS Total_Column3_Profit, AVG(c.column3) AS Column3_Profit_Average
,CASE 
WHEN b.column5 < a.column6 1
      ELSE 0
      END as column_open_flag
,CASE
WHEN a.column4 < 580 THEN 1
     WHEN a.column4 between 580 and 619 THEN 2
     WHEN a.column4 between 620 and 639 THEN 3
     WHEN a.column4 between 640 and 659 THEN 4
     WHEN a.column4 between 660 and 679 THEN 5
     WHEN a.column4 between 680 and 699 THEN 6
     WHEN a.column4 between 700 and 739 THEN 7
     WHEN a.column4 >= 740 THEN 8
     ELSE 0
     END as column4_band
FROM volatile_table1 a
LEFT JOIN database_table1 b
ON a.column1 = b.column0
LEFT JOIN volatile_table2 c
ON a.column1 = c.column2
GROUP BY a.column1
,a.column2
,a.column3
,a.column4
,a.column5
,a.column6
,b.column1
,b.column2
,b.column3
,b.column4
,b.column5
,b.column6
,c.column3

我现在最终返回了超过2,000,000行。所以我想尝试一个UNION子句。这是我更新的查询:

SELECT a.column1, a.column2, a.column3, a.column4, a.column5, a.column6
,CASE 
WHEN b.column5 < a.column6 1
      ELSE 0
      END as column_open_flag,
CASE
WHEN a.column4 < 580 THEN 1
     WHEN a.column4 between 580 and 619 THEN 2
     WHEN a.column4 between 620 and 639 THEN 3
     WHEN a.column4 between 640 and 659 THEN 4
     WHEN a.column4 between 660 and 679 THEN 5
     WHEN a.column4 between 680 and 699 THEN 6
     WHEN a.column4 between 700 and 739 THEN 7
     WHEN a.column4 >= 740 THEN 8
     ELSE 0
     END as column4_band
FROM volatile_table1 a
UNION
SELECT b.column1, b.column2, b.column3, b.column4, b.column5, b.column6
FROM database_table1 b
UNION
SELECT c.column3, SUM(c.column3) AS Total_Column3_Profit, AVG(c.column3) AS Column3_Profit_Average
FROM volatile_table2 c
GROUP BY a.column1
,a.column2
,a.column3
,a.column4
,a.column5
,a.column6
,b.column1
,b.column2
,b.column3
,b.column4
,b.column5
,b.column6
,c.column3

现在,我不断收到3807错误:对象'a'不存在。我跑了

HELP volatile table

查询,它说两个易失性表确实存在。有人可以指出我的错误方向吗? (我还尝试删除了引用b.column5

编辑:

我已从注释中更新到此内容,现在出现错误3653。'所有选择列表不包含相同数量的表达式:

SELECT distinct a.column1, a.column2, a.column3, a.column4, a.column5, a.column6, b.column1, b.column2, b.column3, b.column4, b.column5, b.column6, c.column3, SUM(column3) AS Total_Profit, AVG(column3) AS Profit_Averag
,CASE 
WHEN b.column5 < a.column6 1
      ELSE 0
      END as column_open_flag
,CASE
WHEN a.column4 < 580 THEN 1
     WHEN a.column4 between 580 and 619 THEN 2
     WHEN a.column4 between 620 and 639 THEN 3
     WHEN a.column4 between 640 and 659 THEN 4
     WHEN a.column4 between 660 and 679 THEN 5
     WHEN a.column4 between 680 and 699 THEN 6
     WHEN a.column4 between 700 and 739 THEN 7
     WHEN a.column4 >= 740 THEN 8
     ELSE 0
     END as column4_band
FROM 
(
SELECT a.column1, a.column2, a.column3, a.column4, a.column5, a.column6
FROM volatile_table1 a
UNION ALL
SELECT b.column1, b.column2, b.column3, b.column4, b.column5, b.column6
FROM database_table1 b
UNION ALL
SELECT c.column3, SUM(c.column3) AS Total_Column3_Profit, AVG(c.column3) AS Column3_Profit_Average
FROM volatile_table2 c
GROUP BY 1
) d
GROUP BY a.column1
,a.column2
,a.column3
,a.column4
,a.column5
,a.column6
,b.column1
,b.column2
,b.column3
,b.column4
,b.column5
,b.column6
,c.column3

1 个答案:

答案 0 :(得分:0)

如果要在全部合并后进行汇总,请使用子查询或CTE。我认为查询看起来像这样:

select . . .
from (select column1, column2, column3, column4, column5, . . .
      union all
      select column1, column2, column3, column4, column5, . . .
      union all
      select column1, column2, column3, column4, column5, . . .
     ) abc
group by GROUP BY a_column1, column2, column3, column4, column5