繁体   English   中英

SQL Server 2008 R2-合并结果

[英]SQL Server 2008 R2 - Combine results

我有一张非常简单的桌子。 它具有一个键列和另外4个列,每个列表示不同的数据类型。 规则是这样的:

  1. 每行都有一个完整的键值
  2. 对于每一行,其余4列可能都为空
    要么
  3. 对于每一行,仅填充剩余的4列中的1列

我要实现的目标是编写一个查询,该查询将仅导致两列(键和4中的1)。 本质上将4列浓缩为1列。

4列的数据类型如下:

nvarchar(255)
numeric(32, 5)
datetime
nvarchar(MAX)

源数据

╔═════╦═══════════╦══════╦════════════╦════════════════╗
║ key ║   col1    ║ col2 ║    col3    ║      col4      ║
╠═════╬═══════════╬══════╬════════════╬════════════════╣
║   1 ║ some text ║ null ║ null       ║ null           ║
║   2 ║ null      ║ 5    ║ null       ║ null           ║
║   3 ║ null      ║ null ║ null       ║ null           ║
║   4 ║ null      ║ null ║ 23/02/2017 ║ null           ║
║   5 ║ null      ║ null ║ null       ║ much more text ║
╚═════╩═══════════╩══════╩════════════╩════════════════╝

理想输出

╔═════╦════════════════╗
║ key ║     newCol     ║
╠═════╬════════════════╣
║   1 ║ some text      ║
║   2 ║ 5              ║
║   3 ║ null           ║
║   4 ║ 23/02/2017     ║
║   5 ║ much more text ║
╚═════╩════════════════╝

任何帮助表示赞赏。

仅当您将所有值都转换为字符串时, coalesce()函数才能工作:

select id,
       coalesce(col1,
                cast(col1 as nvarchar(255)),
                cast(col2 as nvarchar(255)),
                cast(col3 as nvarchar(255))
               ) as col

您可以像这样使用COALESCE

select id, coalesce(cast(column1 as nvarchar(255)), cast(column2 as nvarchar(255)), cast(coulmn3 as nvarchar(255)), cast(column4 as nvarchar(255)) 
from ...

如果它们全部为NULL则将返回NULL 否则,如果保证我们只有四列NOT NULL之一,则将返回这一列。

您应该使用isull

select key, isnull(col1,col2,col3,col4) as newCol ......

有时由于数据类型优先级的原因,使用COALESCE可能会产生问题。 由于COALESCE根据数据类型优先级确定输出的类型。

检查以下链接以获取更多详细信息。

参考

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM