2009-11-03 111 views

回答

2

CASE 
    WHEN TITLE IS NOT NULL THEN 'A' 
    WHEN LOCAL_TITLE IS NOT NULL THEN 'B' 
    END 
AS COMBINED_TITLE 

到这样的事情

我不确定你的意思,但如果你想设置一个变量,你会做这样的:

SELECT 
    @CombinedTitle = CASE 
     WHEN Title IS NOT NULL THEN Title 
     WHEN Local_Title IS NOT NULL THEN Local_Title 
    END 
... 

如果你仍然想创建列Combined_Title但来自这两个标题列中的值,你会怎么做:

SELECT 
    CASE 
     WHEN Title IS NOT NULL THEN Title 
     WHEN Local_Title IS NOT NULL THEN Local_Title 
    END AS Combined_Title 
... 

另见documentation on COALESCE,它甚至提到,这相当于一个CASE声明就像你的(加上ELSE NULL

+0

thanx Blixt,您的第二个选择是我后来,不幸的是它不能在SQL Server 2005中工作... – Fet 2009-11-03 09:08:14

+0

糟糕!有效!感谢很多Blixt。 – Fet 2009-11-03 09:10:40

+0

COALESCE是要走的路。 – onedaywhen 2009-11-03 10:01:18

2

ISNULL(TITLE,LOCAL_TITLE)

CASE 
    WHEN TITLE IS NOT NULL THEN COMBINED_TITLE=TITLE 
    WHEN LOCAL_TITLE IS NOT NULL THEN COMBINED_TITLE=LOCAL_TITLE 
    END 
AS COMBINED_TITLE 

Thanx提前AS COMBINED_TITLE

+0

短和对点找到的第一个非NULL值。喜欢它。 – Jonathan 2009-11-03 08:52:41

+1

请注意,如果TITLE和LOCAL_TITLE都为NULL,则会将COMBINED_TITLE设置为NULL(虽然在这种情况下可能需要这样) – 2009-11-03 08:54:50

+0

You are right Tim – Fet 2009-11-03 09:06:30

3

你是否试图在update语句中使用它?其实你可以破除的CASE语句在这种情况下

UPDATE 
    <table> 
SET 
    COMBINED_TITLE = COALESCE(TITLE, LOCAL_TITLE, COMBINED_TITLE) 

COALESCE将在列表中

+0

+1:'COALESCE'可能是Greg真正想要的。 – Blixt 2009-11-03 08:53:48

+0

没有蒂姆,我需要报告,尽管非常感谢 – Fet 2009-11-03 09:05:26