【问题标题】:3706 Syntax error: expected something between an integer and ')'3706 语法错误:预期介于整数和 ')' 之间
【发布时间】:2020-05-14 23:46:24
【问题描述】:

我正在努力找出问题所在,我的部分代码看起来像这样

(sel no_2, sum(L) from (
                sel no_2, colB, count(distinct(colC))
                from dbA.tblP as p
                    join dbB.tblI as i on p.id = i.id and p.no = i.no
                    join dbB.tblT as t on i.no_2 = t.no_2
                    join dbA.mp_tblA as a on t.no_2 = a.no_2) l 
                    ) as l
group by 1) as l        

Teradata 点与其中的 group by 1) 一致。我应该在“1”和“)”括号之间放什么?有什么办法可以解决吗?

【问题讨论】:

  • 您应该提供整个查询。这么小的部分很难说什么。
  • 好的,请告诉我如何将其格式化为注释中的代码?
  • 使用问题下方的“编辑”按钮并在此处添加代码。
  • 是的,我编辑了它,希望现在更清楚了
  • 这部分代码中似乎有一个额外的括号(连同别名):a.no_2) l

标签: sql database group-by subquery teradata


【解决方案1】:

看起来你有一个额外的) l 导致语法错误。试试这个:

SELECT no_2, SUM(L) 
FROM (
  SELECT no_2, colB, COUNT(DISTINCT colC) AS no_colC
  FROM dbA.tblP AS p
  INNER JOIN dbB.tblI AS i ON p.id = i.id AND p.no = i.no
  INNER JOIN dbB.tblT AS t ON i.no_2 = t.no_2
  INNER JOIN dbA.mp_tblA AS a ON t.no_2 = a.no_2
) AS l
GROUP BY 1

关于可读性的一些建议,除了 cmets:

  • 使用SELECT 而不是SEL
  • 指定INNER JOIN 而不是JOIN
  • 如果您打算使用count(distinct(colC)),请给它一个别名,例如no_colC

另外,您在SUM(L) 中引用的“L”值是多少?除非您在子选择中包含该字段,否则查询不会按原样工作。

【讨论】:

  • 除了您的建议:distinct 不是函数。 distinct adistinct (a) 完全一样
  • 是的,我同意...没有() 会更清晰。我更新了我的答案,谢谢。
猜你喜欢
  • 2020-10-10
  • 1970-01-01
  • 2019-05-08
  • 2016-07-23
  • 2017-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
相关资源
最近更新 更多