【问题标题】:Q: SQL statements? Where to put Order by? [duplicate]问:SQL 语句?在哪里下订单? [复制]
【发布时间】:2017-02-22 03:47:52
【问题描述】:

这里有我当前查询的公式。但是,在语句末尾放置 order by 时遇到错误。遇到不正确的语法。

下面是我的公式。我想知道在哪里插入订单没有任何错误。

select * from #source;

with cteNumericRef as
(
    select [NAME],[BRAND],[REFERENCE]
    from #source
    where ISNUMERIC([REFERENCE]) = 1
)

, cteCheckRow as
(
)

, ctePairedRow as
(
    select
          num_ref.[NAME]
        , num_ref.[BRAND]
        , num_ref.[REFERENCE]
        , row_number() over (partition by num_ref.[REFERENCE] order by num_ref.[NAME]) as [Pair_Num]

    from cteNumericRef num_ref

    left join cteCheckRow check_row
        on check_row.[REFERENCE] = num_ref.[REFERENCE]

    where check_row.[REFERENCE] is null
)

, cteTextRow as
(
    select [NAME],[BRAND],[REFERENCE],
        case [REFERENCE]
            when 'paired' then 'PAIRED'
            when 'nonpaired' then 'UNIQUE'
            when 'dropped' then 'DROPPED'
            when '' then ''
        else 'CHECK' end as [COMMENT]
    from #source
    where ISNUMERIC([REFERENCE]) <> 1
)

select
    left_row.[NAME]
    , left_row.[BRAND]
    , left_row.[REFERENCE]
    , right_row.[BRAND] as [COMMENTS]
from ctePairedRow left_row
inner join ctePairedRow right_row
    on left_row.[REFERENCE] = right_row.[REFERENCE]
    and left_row.[Pair_Num] <> right_row.[Pair_Num]

union all

select
    num_ref.[NAME]
    , num_ref.[BRAND]
    , num_ref.[REFERENCE]
    , check_row.[COMMENT]
from cteNumericRef num_ref
inner join cteCheckRow check_row
    on check_row.[REFERENCE] = num_ref.[REFERENCE]

union all

select
      [NAME]
    , [BRAND]
    , [REFERENCE]
    , [COMMENT]
from cteTextRow;

【问题讨论】:

  • 请不要破坏您的问题
  • 对不起,有正当理由

标签: sql-server sql-order-by sequence


【解决方案1】:

您不能在 CTE 中使用 ORDER BY

但是在所有 CTE 和所有 UNION ALL 之后的最后一个 SELECT 之后使用 ORDER BY 将适合 喜欢

....
union all

select
      [NAME]
    , [BRAND]
    , [REFERENCE]
    , [COMMENT]
from cteTextRow
ORDER BY .....;

这是一个示例案例

;with cte as (
    select 'Kodyaz' as sozcuk
    union all
    select 'Eralper'
    union all
    select 'Vader'
)
select 'Phantom' as sozcuk
union all
select * from cte
order by sozcuk

输出为

【讨论】:

  • 我试过了,没用。
  • 我添加了一个 SQL 示例。您的情况是否有错误,这是什么?或者 Order By 没有按您的意愿工作?
  • 我不知道我做错了什么
  • (90726 行受影响)消息 208,级别 16,状态 1,第 106 行无效的对象名称“ctecheckrow”。这是错误
  • 首先,需要在第一个 CTE 表达式之前添加分栏。 Like " ;with cteNumericRef as " 而不是 " with cteNumericRef as "
猜你喜欢
  • 2021-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 2012-11-08
  • 1970-01-01
  • 2014-06-27
  • 2023-03-10
相关资源
最近更新 更多