1
select site,
case
when site='AppCircle' then (count(create_dtime)*0.4438083264)
when site='AppCircle Clips' then (count(create_dtime)*0.0096978792)
when site='BC : SponsorPay' then (count(create_dtime)*0.9620989399)
when site='BonusCoins.com : Aarki' then (count(create_dtime)*0.4612565445)
when site='Nielsen Rewards' then (count(create_dtime)*-0.6000000000)
when site ='Portal : Paymentwall' then (count(create_dtime)*0.5433541667)
when site ='Portal : RadiumOne' then (count(create_dtime)*0.0619798753)
when site ='Portal : TrialPay' then (count(create_dtime)*2.1468159204)
when site ='bonuscp_login' then (count(create_dtime)*-0.1500000000)
when site ='facebook_like' then (count(create_dtime)*2.1468159204)
when site ='iTunes' then (count(create_dtime)*-0.0300000000)
end
From player_aux_pt
Where
Trunc(Create_Dtime) >= To_Date('2012-Nov-01','yyyy-mon-dd')
And Trunc(Create_Dtime) <= To_Date('2012-Nov-30','yyyy-mon-dd')  
group by site

这导致两列数据

Site    [insert every case statement here]

我只想将第二列信息命名为“利润”

Site    Profit

我已经尝试了许多不同的方法被卡住了。

4

2 回答 2

4

您可以使用 AS 重命名(或命名)SQL 中的列和表达式:

CASE 
  WHEN. . .
  WHEN. . .
END AS Profit

但是,以这种方式使用 CASE 表达式不是很可扩展。考虑将乘法因子移动到另一个表,键入site然后将该表加入查询中。

于 2012-12-17T21:59:14.200 回答
3

注意:由于您的 CASE 语句只是一个基本的DECODE模式,请查看链接以获取简洁的替代方案。

select site,
       count(create_dtime)
     * DECODE(site, 'AppCircle', 0.4438083264,
                    'AppCircle Clips', 0.0096978792,
                    'BC : SponsorPay', 0.9620989399,
                    ......) Profit
 ....


您可以通过在表达式或基本列名称之后为其命名来为列命名,例如

SELECT
    Site,
    Site ReNamedSite,
    Concat(Site,'a') "AddedAnA",
    COALESCE(Site,Address) AS "Two Words"
...

笔记:

  1. 关键字AS是可选的
  2. 双引号的使用是可选的,除非您使用多个单词

IE

select site,
case
when site='AppCircle' then (count(create_dtime)*0.4438083264)
when site='AppCircle Clips' then (count(create_dtime)*0.0096978792)
when site='BC : SponsorPay' then (count(create_dtime)*0.9620989399)
when site='BonusCoins.com : Aarki' then (count(create_dtime)*0.4612565445)
when site='Nielsen Rewards' then (count(create_dtime)*-0.6000000000)
when site ='Portal : Paymentwall' then (count(create_dtime)*0.5433541667)
when site ='Portal : RadiumOne' then (count(create_dtime)*0.0619798753)
when site ='Portal : TrialPay' then (count(create_dtime)*2.1468159204)
when site ='bonuscp_login' then (count(create_dtime)*-0.1500000000)
when site ='facebook_like' then (count(create_dtime)*2.1468159204)
when site ='iTunes' then (count(create_dtime)*-0.0300000000)
end Profit
From player_aux_pt
Where
Trunc(Create_Dtime) >= To_Date('2012-Nov-01','yyyy-mon-dd')
And Trunc(Create_Dtime) <= To_Date('2012-Nov-30','yyyy-mon-dd')  
group by site
于 2012-12-17T21:59:48.110 回答