2012-12-27 80 views
0

好的,这里有一点我正在努力完成的。我在select语句中有一个case语句。以下是我有...:如何将多个陈述合并为一个陈述?

CASE pu.Group_Value 
    WHEN 1 THEN 'A' 
    WHEN 2 THEN 'B' 
    WHEN 3 then 'C' 
    WHEN 4 then 'D' 
    WHEN 5 then 'E' 
    WHEN 6 then 'F' 
    WHEN 7 then 'G' 
END AS Groups, 

我遇到的问题是,这种情况下,语句可以有不止一个回来的回报。我需要做的是能够将它们合并为一个。我最终有7行回来,但只需要在该行列中全部7个字母的一行...

谢谢!

+1

看起来你需要连接行。你在使用SQL Server还是其他一些DBMS? – PinnyM

+1

不,它不能。 case语句将按行进行评估。它不会生成新的行。你能否进一步解释一下,可能是用你的起始数据看起来像什么样的例子,导致7行返回的场景以及期望的结束状态? – billinkc

+0

我试图连接行... SQL Server 2008R2 ... – Codexer

回答

1

使用FOR XML PATH。例如:

SELECT STUFF(
    (
    SELECT ','+ CASE pu.Group_Value 
        WHEN 1 THEN 'A' 
        ... 
       END 
    FROM pu 
    FOR XML PATH('') 
),1,1,'') as Groups 

只要确保您不会在您的CASE逻辑中留下任何空间,或者它将使整个字符串为NULL。

+0

我能否得到一个更好的例子,对我来说有点困惑......? @PinnyM – Codexer

+1

看到这[sqlfiddle](http://sqlfiddle.com/#!3/c1211/12)了解如何构建。如果你有一个更复杂的查询,请发布,我会告诉你如何使用它们与STUFF和FOR XML PATH – PinnyM

+0

谢谢@PinnyM我会给它一个镜头! – Codexer

0

你可能想要做的是GROUP BY pu.Group_Value。

由此返回的行数取决于上面包含的SQL查询的其余部分。如果您只想返回一行,SELECT TOP 1 ...是您最快的选择,否则您需要更加具体地使用WHERE子句标准或使用GROUP BY进行评估,这可能会改变您包含在您的列中的列选择。