2012-10-19 24 views
1

我有這樣Case語句來控制不同的輸出

Select SSN, FName, MName, LName, sum(WagesAmt) as WagesAmt, sum(OtherAmt) as OtherAmt 
     from #data 
     group by SSN, FName, MName, LName 
     having sum(WagesAmt) <> 0 

查詢的時候纔來的其他國家,我希望輸出的姓氏,FNAME,MNAME結合。

我需要做一些這樣的:

declare @result table 

set @result = case 
when then select 
when then select 

我的問題是我怎麼能寫一個case語句來控制不同的輸出要求?

對於TX 輸出將喜歡

SSN FNAME,LName的,量 1111喬恩·王3444

爲CA

輸出會像這些

1111王, J 34444

對不起,感到困惑 謝謝

+5

其他國家?那是什麼 ? –

+0

嘗試使用示例輸入數據集和您想要的結果來表達您的要求。 – MatBailie

+0

歡迎使用堆棧溢出。請花點時間閱讀[FAQ]不久。小心那些沒有中間名字的人(比如我)。如果Mname列包含NULL,則表達式如'Fname || ''|| Mname || ''|| Lname'產生一個空字符串(至少在標準SQL中),因爲一個項是NULL。但是,除此之外,你的問題並不完全清楚。你提到'其他國家',但目前的查詢中還沒有任何國家。您是否希望改變條件或返回的列?你能顯示一些簡單的輸入數據和輸出數據嗎? –

回答

1

我想象的狀態是,會告訴你,如果你想你的fName和Lname作爲不同的列或相同的列,對不對?

問題是,只要你有你在你的團隊選擇使用的所有領域,它的罰款。在你的情況下,祕密是,你需要一個空列,當你有FNAME和LNAME togheter,列有CASE並與oposite CASE

我希望這個簡單的例子可以幫助你在第二欄:

CREATE table names(
firstName varchar(50), 
lastName varchar(50), 
condition int, 
amount int) 

insert into names VALUES('First1', 'Last1', 1, 10) 
insert into names VALUES('First1', 'Last1', 1, 10) 
insert into names VALUES('First2', 'Last2', 2, 5) 
insert into names VALUES('First2', 'Last2', 2, 5) 


SELECT 
case 
    when condition=1 then firstname 
    else firstname + ' - ' + lastname 
    END, 
case 
    when condition=1 then lastname 
    else '' 
    END, 
sum(amount) 
FROM names 
group BY firstname, lastname, condition 

結果:

Column1      Column2   Column3 
First1      Last1    20 
First2 - Last2         10 
+0

非常感謝你 –

+1

np,記住投票並標記爲答案,如果它解決了你的問題 – Diego