SQL - 有条件地将同一个表中的两列连接成一列

时间:2012-09-28 19:57:25

标签: sql

我正在使用包含两个存储信息版本的表。为了简化它,一列包含文件运行的旧描述,而另一列包含用于显示运行文件的更新标准。它变得更复杂,因为旧列本身可以有多个标准。表:

Old Column              New Column
Desc: LGX/101/rpt          null
  null                     Home
Print: LGX/234/rpt         null
  null                     Print
  null                     Page

我需要将两列合并为一列,但我还需要从旧列值的开头删除“Print:”和“Desc:”字符串。有什么建议?如果/当我忘记你需要知道的事情时,请告诉我!

(我正在使用Cache SQL编写,但我只是想解决一下我的问题的一般方法,我可以弄清楚过去的具体细节。)

编辑:条件是如果substr(oldcol,1,5)='desc:'则substr(oldcol,6)       否则如果substr(oldcol,1,6)='print:'则substr(oldcol,7)等。以便取出“desc:”和“print:”来稍微清理数据。

EDIT2:我想让表格看起来像这样:

    Col
  LGX/101/rpt
    Home
  LGX/234/rpt
    Print
    Page

3 个答案:

答案 0 :(得分:2)

很难理解你正在寻找什么。以上是否表示需要组合/合并的前/后或两列。

我的猜测是COALESCE可以帮助你。它需要一堆参数并返回第一个非NULL。

答案 1 :(得分:1)

如果new为NULL,看起来你想要从new获取值,如果new为null,则看起来很旧。为此,您可以在SQL中使用case语句。我知道CAS支持CASE语句,我不确定他们是否会帮助你。

SELECT (CASE WHEN old_col IS NULL THEN new_col ELSE old_col END) as val FROM table_name

如果old_col为NULL,这将获取new_col,否则它将获取old_col。

答案 2 :(得分:0)

您可以使用CharIndex和Substring函数的组合删除Print:和Desc :.在这里

SELECT  CASE WHEN CHARINDEX(':',COALESCE(OldCol,NewCol)) > 0 THEN 
         SUBSTRING(COALESCE(OldCol,NewCol),CHARINDEX(':',COALESCE(OldCol,NewCol))+1,8000) 
         ELSE
         COALESCE(OldCol,NewCol)
        END AS Newcolvalue  
FROM  [SchemaName].[TableName]

Charindex给出了您要搜索的字符/字符串的位置。

因此,您在计算列(Coalesce部分)中获得“:”的位置,并将该值传递给子字符串函数。然后在指示子串函数的位置添加+1以获取“:”之后的部分。现在你有一个没有“Desc:”和“Print:”的字符串。

希望这有帮助。