在CASE-WHEN选择中处理TOP

时间:2014-12-01 14:21:14

标签: sql-server

我在使用TOP解决SELECT CASE时遇到问题。

我应该提一下我对此很新吗?

我想从两个表中填写一列信息:

表1:第1列包含我想要使用的数据

表1:第2列是连接

表2:第1列包含我想要使用的数据

表2:第2列是连接

所以:

表1第1列包含字母(D M和T)和空格。

表2第1列包含单词('劳斯''转移''交付')

我尝试使用以下条件填充我的专栏:

  • 当列T1.C1包含D,M或T时,写入D M或T。
  • 当列T1.C1为空时,请查看T2.C1列:
    • 如果列T1.C1包含' Rolls',请写下' R'
    • 否则不要写任何东西

对我来说,事情变得非常快,因为我想从B栏中获取的信息需要使用TOP。

关键词“' LIKE' ”附近的语法语法不正确。

到目前为止,这是我的代码。有什么建议吗?

SELECT (
    CASE T1.C1
        WHEN 'D' THEN 'D'
        WHEN 'M' THEN 'M'
        WHEN 'T' THEN 'T'
        WHEN (
            SELECT TOP 1 T2.C1 
            FROM T2 
            WHERE T1.C2=T2.C2
        ) LIKE 'ROLLS' THEN 'R'
       ELSE ''
    END) AS my_data
FROM T1

2 个答案:

答案 0 :(得分:0)

像这样更改Case Statement。您已将Input Expressionsearched CASE expression

混合在一起
SELECT ( CASE
           WHEN T1.C1 = 'D' THEN 'D'
           WHEN T1.C1 = 'M' THEN 'M'
           WHEN T1.C1 = 'T' THEN 'T'
           WHEN (SELECT TOP 1 T2.C1
                 FROM   T2
                 WHERE  T1.C2 = T2.C2) LIKE 'ROLLS' THEN 'R' -- (Add Order by Clause in Correlated Subquery)
           ELSE ''
         END ) AS my_data
FROM   T1 

答案 1 :(得分:0)

您的问题并不完全清楚,但我认为您可以简化此操作并完全删除子查询。

SELECT 
CASE
    WHEN LEFT(T1.C1 + T2.C1, 1) = 'R' THEN 'R'
    ELSE T1.C1
END AS MyData 
FROM T1