[英]SQL Server 2008 R2 - Combine results
我有一张非常简单的桌子。 它具有一个键列和另外4个列,每个列表示不同的数据类型。 规则是这样的:
我要实现的目标是编写一个查询,该查询将仅导致两列(键和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.