如果原始列为NULL,如何将SELECT值设置为不同的列?

时间:2013-02-25 20:10:38

标签: sql tsql case

SELECT TOP 10
        VendorId,
        CASE WHEN VendorNumber IS NULL THEN VendorId
        END AS 'VendorNumber'
FROM    Table

以上不起作用。

基本上我想这样做:

我想选择2列:VendorId和VendorNumber。

如果VendorNumber为NULL,我想显示VendorId。

如何通过上述查询完成此操作?该查询基本上显示NULL而不是VendorID。

6 个答案:

答案 0 :(得分:5)

您必须指定ELSE,否则当VendorNumber 时,您将获得null:

SELECT TOP 10
        VendorId,
        CASE WHEN VendorNumber IS NULL THEN VendorId ELSE VendorNumber
        END AS 'VendorNumber'
FROM    Table

您可以使用isnullcoalesce

进行简化
select top 10 VendorId, isnull(VendorNumber, VendorId) as VendorNumber
from Table

答案 1 :(得分:2)

您错过了ELSE,因此它会在null不为空的所有行中放置VendorNumber

SELECT TOP 10 VendorId,
    CASE 
        WHEN VendorNumber IS NULL 
        THEN VendorId
        ELSE VendorNumber
    END AS 'VendorNumber'
FROM    Table

这也可以写成:

SELECT TOP 10 VendorId,
    Coalesce(VendorNumber, VendorId) AS 'VendorNumber'
FROM    Table

答案 2 :(得分:0)

尝试 选择前10名             厂商ID,              COALESCE(VendorNumber,VendorId)作为vendornumber 从表

答案 3 :(得分:0)

试试这个

select top 10, vendorid, coalesce(VendorNumber,VendorID) VendorNumber
from yourtable

答案 4 :(得分:0)

执行此操作的SQL函数是coalesce()

SELECT TOP 10 VendorId, coalesce(VendorNumber, VendorId) as VendorNumber
FROM    Table

这假设VendorId和VendorNumber是相同的类型。否则,您可能需要添加一些转换。例如,如果VendorId是字符串而VendorNumber是一个数字:

select top 10, VendorId, coalesce(cast(VendorNumber as varchar(255)), VendorId)
from Table

答案 5 :(得分:0)

“Else”缺失。

 SELECT TOP 10 VendorId,
        CASE 
            WHEN VendorNumber IS NULL 
            THEN VendorId
            ELSE VendorNumber
        END AS 'VendorNumber'
    FROM    Table