2013-02-25 59 views
0
SELECT TOP 10 
     VendorId, 
     CASE WHEN VendorNumber IS NULL THEN VendorId 
     END AS 'VendorNumber' 
FROM Table 

上述不起作用。如果原始列为NULL,如何将SELECT值设置为不同的列?

基本上我想这样做:

我要选择2列:VENDORID和VendorNumber。

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

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

+0

为什么要显示vendorid列两次? – DevelopmentIsMyPassion 2013-02-25 20:13:40

+2

在你的代码中你需要** ELSE **。 – 2013-02-25 20:14:26

回答

5

必须指定ELSE,或者你会得到空当VendorNumber空:

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

+1 - 尽管如此,它可以更清洁,同意COALESCE' – LittleBobbyTables 2013-02-25 20:16:22

+0

,补充说。 – Blorgbeard 2013-02-25 20:19:04

+0

谢谢!我明白了现在的问题。 – 2013-02-25 20:27:14

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 
0

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

0

试试这个

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

SQL函数做,这是coalesce()

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

这假定厂商ID和VendorNumber是同一类型。否则,您可能需要添加一些转化。例如,如果VendorId是字符串和VendorNumber的一个数字:

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

“Else”缺失。

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