CTE表...使用CASE语句填充它

时间:2014-03-05 01:17:26

标签: sql tsql sql-server-2012

我正在使用SQL Server 2012并尝试在CTE中运行3个单独的语句。

类似的东西:

WITH C1 AS
(
    if (@Param = 1)
      SELECT Field1, Field2 FROM TableA
    else if (@Param = 2)
      SELECT Field1, Field2 FROM TableB
    else
      SELECT Field1, Field2 FROM TableC
),
C2 AS
  Select xxxxx

但它没有编译。

这可能吗?

2 个答案:

答案 0 :(得分:2)

您可以将CTE的Select更改为:

WITH C1 AS
(

      SELECT Field1, Field2 FROM TableA WHERE @Param = 1
    UNION ALL 
      SELECT Field1, Field2 FROM TableB  WHERE @Param = 2
    UNION ALL
      SELECT Field1, Field2 FROM TableC WHERE @Param <> 1 and @Param <> 2
),
C2 AS
  Select xxxxx

答案 1 :(得分:1)

不,公共表表达式不支持if else块。公用表表达式基本上是内联视图。