2012-12-27 117 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進行評估,這可能會改變您包含在您的列中的列選擇。