【问题标题】:Cannot generate records using Choose(Denali) and Recursive CTE无法使用 Choose(Denali) 和递归 CTE 生成记录
【发布时间】:2011-09-01 06:15:00
【问题描述】:

我想使用新的选择函数在递归 CTE 中生成一些记录

    ;With Cte As
(
    Select 
        Id=1
        To = Cast ('India' as varchar(10))
    Union All
    Select 
        Id +1 
        ,To= Cast( Choose(ID,'India','Belgium') as varchar(10))     
    From Cte 
    Where Id < 10    
)

Select * from Cte

预期输出

Id  PlayerName                  BelongTo
1   Player1                     India
2   Player2                     Belgium    

如何使用选择功能来做到这一点?

【问题讨论】:

    标签: sql sql-server sql-server-2012


    【解决方案1】:

    CHOOSE 被记录为返回 NULL:

    如果索引值超出了值数组的界限

    所以你需要执行一个模运算。 SQL 中的取模运算符是%,所以应该是:

    Cast( Choose(((ID%4)+1),'India','Australia','England','Belgium') as varchar(100))
    

    (我最初从ID 得到一个-1,但鉴于此语句是在ID 值来自前一行的上下文中执行的,这已经处理)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-21
      • 2011-04-25
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-16
      相关资源
      最近更新 更多