【问题标题】:'Order By' with 'Union' and 'GroupBy' (Oracle)带有“Union”和“Group By”的“Order By”(Oracle)
【发布时间】:2020-12-11 11:09:26
【问题描述】:

早上好。我有一个包含 Group By 和 Union 表的查询。问题是当我尝试订购最终结果时。我总是遇到错误:

SELECT {Account}.[Id], {Account}.[AccountName], {Account}.[Project], {Account}.[Initiative], {Account}.[AccountName], {Application}.[Id], {Application}.[ApplicationName]
FROM {Account}
INNER JOIN {ApprovalWorkUnitDetail} ON {ApprovalWorkUnitDetail}.[AccountID] = {Account}.[Id]
INNER JOIN {Issue} ON {Issue}.[Id] = {ApprovalWorkUnitDetail}.[IssueID]
INNER JOIN {ServiceRequest} ON {ServiceRequest}.[Id] = {Issue}.[ServiceRequestId]
INNER JOIN {ServiceRequestProduct} ON {ServiceRequestProduct}.[ServiceRequestId] = {ServiceRequest}.[Id]
INNER JOIN {Product} ON {Product}.[Id] = {ServiceRequestProduct}.[ProductId]
LEFT JOIN {Application} ON {Application}.[Id] = {Account}.[ApplicationID]
WHERE ({ApprovalWorkUnitDetail}.[ContractID] = @ContractID)
    AND ({ServiceRequest}.[Id] = @ServiceRequestID OR @ServiceRequestID = @NullIdentifier)
    AND ({Product}.[Id] = @ProductID OR @ProductID = @NullIdentifier)
    AND ({ApprovalWorkUnitDetail}.[MonthIdentifier] = @MonthIdentifier)
    AND ({ApprovalWorkUnitDetail}.[YearIdentifier] = @YearIdentifier)
    AND ({Issue}.[PaymentStatusID] = @PaymentStatusApprovedID)

UNION

SELECT {Account}.[Id], {Account}.[AccountName], {Account}.[Project], {Account}.[Initiative], {Account}.[AccountName], {Application}.[Id], {Application}.[ApplicationName]
FROM {Account}
INNER JOIN {ApprovalRefinementDetail} ON {ApprovalRefinementDetail}.[AccountID] = {Account}.[Id]
INNER JOIN {Worklog} ON {Worklog}.[Id] = {ApprovalRefinementDetail}.[WorklogID]
INNER JOIN {Issue} ON {Worklog}.[IssueId] = {Issue}.[Id]
INNER JOIN {ServiceRequest} ON {ServiceRequest}.[Id] = {Issue}.[ServiceRequestId]
INNER JOIN {ServiceRequestProduct} ON {ServiceRequestProduct}.[ServiceRequestId] = {ServiceRequest}.[Id]
INNER JOIN {Product} ON {Product}.[Id] = {ServiceRequestProduct}.[ProductId]
LEFT JOIN {Application} ON {Application}.[Id] = {Account}.[ApplicationID]
WHERE ({ApprovalRefinementDetail}.[ContractID] = @ContractID)
    AND ({Product}.[Id] = @ProductID OR @ProductID = @NullIdentifier)
    AND ({ServiceRequest}.[Id] = @ServiceRequestID OR @ServiceRequestID = @NullIdentifier)
    AND ({ApprovalRefinementDetail}.[MonthIdentifier] = @MonthIdentifier)
    AND ({ApprovalRefinementDetail}.[YearIdentifier] = @YearIdentifier)
    AND ({Worklog}.[PaymentStatusID] = @PaymentStatusApprovedID)
 
GROUP BY {Account}.[Id], {Account}.[AccountName], {Account}.[Project], {Account}.[Initiative], {Account}.[AccountName], {Application}.[Id], {Application}.[ApplicationName]
ORDER BY {Account}.[AccountName]

我不知道为什么我总是收到错误 ORA-00904,它表明 AccountName 是无效标识符。

我正在使用 ORACLE 数据库。 非常感谢

【问题讨论】:

  • UNION 运算符处理完行集时,列不再与任何表关联。它们只是UNION 的列。
  • Oracle 和方括号用于分隔标识符?
  • 我会试试ORDER BY [AccountName]
  • 这段代码看起来不像 Oracle 代码。
  • @Gordon Linoff 这是 OutSystems 语法,但使用的是 Oracle DB

标签: sql oracle sql-order-by union


【解决方案1】:

我建议将您的 union 查询移至子查询,并在外部范围内排序:

select *
from (
    -- your big query
) t
order by accountname

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 2017-02-06
    • 1970-01-01
    相关资源
    最近更新 更多