使用外连接和case语句从Oracle SQL返回一行

时间:2013-06-25 14:55:57

标签: oracle case

我正在试图弄清楚每个结果只返回一行,即使每个结果有多个活动('act')。我阅读并搜索无济于事。

我想要的是什么:

Date       Site Result act1 act2

1985-06-10 1008 NT6    5    10

我得到了什么:

Date       Site Result act1 act2

1985-06-10 1008 NT6    5    
1985-06-10 1008 NT6         10

这是我的(示例)代码,我知道它没有被破坏,但它是我尝试过的路径。我只是不知道如何获得我想要的东西。

SELECT
t."Date",
t."Site",
t."Result",
CASE
  WHEN a.Type = 'act1'
  THEN a.Count
END AS "act1",
CASE
  WHEN a.Type = 'act2'
  THEN a.Count
END AS "act2"
FROM   
(
SELECT Sample.SAMPLE_ID,
       Sample.Date,
       Sample.Site,
       Sample.Result    
FROM   Sample
WHERE  Sample.Date is Between then and now
) t
LEFT OUTER JOIN
ACTIVITY
ON (ACTIVITY.SAMPLE_ID = t.SAMPLE_ID)

1 个答案:

答案 0 :(得分:0)

你去吧

select t."Date", t."Site", t."Result",
        sum(case when a.Type = 'act1' then a.Count else 0 end ) AS act1,
        sum(case when a.Type = 'act2' then a.Count else 0 end ) AS act2
from   sample left outer join activity
        on (activity.sample_id = t.sample_id)
where  sample.date is between then and now

并且不要在列名上使用大括号。