在案例中处理TOP-然后选择

时间:2014-11-28 16:51:27

标签: sql-server tsql

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

我应该提一下我对此很新吗? :d 这也是我在Stackoverflow上的第一篇文章。嗨!

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

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

表1:第2列是连接

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

表2:第2列是连接

所以:

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

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

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

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

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

关键词'来自'附近的语法语法不正确。

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

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)
    THEN 'R'
ELSE
    ''
END) as my_data,

FROM T1

1 个答案:

答案 0 :(得分:0)

我认为你应该尝试找到一种更简单的方法来写这个:

WITH    cte
          AS ( SELECT   C1 ,
                        C2 ,
                        ROW_NUMBER() OVER ( PARTITION BY C2 ORDER BY col ) rn
               FROM     Table2
             )
    SELECT  CASE WHEN T1.C1 = '' THEN LEFT(T2.C1, 1)
                 ELSE T1.C1
            END AS my_data
    FROM    Table1 T1
            LEFT OUTER JOIN cte T2 ON T1.C2 = T2.C2
                                      AND T2.rn = 1

您尚未发布表架构,因此可能需要进行调整。