Case语句控制不同的输出

时间:2012-10-19 15:08:41

标签: sql

我有这样的查询

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

当它来到另一个状态时,我希望输出结合Lastname,Fname,Mname。

我是否需要做类似的事情:

declare @result table

set @result = case 
when  then select 
when  then select

我的问题是如何编写案例陈述来控制不同的输出要求?

对于TX 输出将

ssn FNAME,LName,金额 1111 jon WANG 3444

for CA

输出将是这样的

1111年王,J 34444

抱歉这令人困惑 感谢

1 个答案:

答案 0 :(得分: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