在sql函数中{if else}

时间:2016-07-13 20:23:33

标签: sql sql-server-2012

我有一张类似于此的表:(第一行是标题)

ID --peach --cherry --plum --berry --apple --mango --orange --grapes

932 --peach --NULL --NULL - NULL --NULL --NULL --NULL --NULL

932 --NULL --NULL --NULL --berry - NULL - mango --NULL --NULL

932 --NULL --NULL - NULL - 浆果--NULL - mango --NULL --NULL

926 --NULL --cherry --NULL - NULL --apple --NULL --NULL --NULL

926 --NULL --cherry --NULL - NULL --apple --ULL --NULL --NULL --grapes

我正在尝试创建一个函数来获取ID并从每个其他列中选择初始值(如果存在),然后将它们连接起来,如下所示

ID水果

932 P

932 B,M

932 B,M

932 C,A

932 C,A,G

最好这样做并创建一个函数,我可以稍后调用它来创建一个最终表。任何帮助表示赞赏。该表有大约51,000行。

1 个答案:

答案 0 :(得分:1)

这应该这样做:

示例数据:

CREATE TABLE #temp1(ID     INT
           , peach  VARCHAR(10)
           , cherry VARCHAR(10)
           , plum   VARCHAR(10)
           , berry  VARCHAR(10)
           , apple  VARCHAR(10)
           , mango  VARCHAR(10)
           , orange VARCHAR(10)
           , grapes VARCHAR(10));


INSERT INTO #temp1
VALUES
(932,'peach' , NULL ,  NULL ,  NULL ,   NULL ,  NULL ,  NULL,  NULL  ),
(932,NULL  , NULL   ,NULL   ,'berry'  , NULL   ,'mango'  ,NULL  ,NULL  ),
(932,NULL  , NULL   ,NULL   ,'berry'  , NULL   ,'mango'  ,NULL  ,NULL  ),
(926,NULL  , 'cherry' ,NULL   ,NULL   , 'apple'  ,NULL   ,NULL  ,NULL  ),
(926,NULL  , 'cherry' ,NULL   ,NULL   , 'apple'  ,NULL   ,NULL  ,'grapes')

QUERY:

SELECT #temp1.ID
    , ISNULL(SUBSTRING(#temp1.peach,1,1),'')
    + ISNULL(SUBSTRING(#temp1.cherry,1,1),'')
    + ISNULL(SUBSTRING(#temp1.plum,1,1),'')
    + ISNULL(SUBSTRING(#temp1.berry,1,1),'')
    + ISNULL(SUBSTRING(#temp1.apple,1,1),'')
    + ISNULL(SUBSTRING(#temp1.mango,1,1),'')
    + ISNULL(SUBSTRING(#temp1.orange,1,1),'')
    + ISNULL(SUBSTRING(#temp1.grapes,1,1),'')
FROM   #temp1;

结果:

enter image description here