有没有办法将WHERE条件应用于select中的一个字段?

时间:2012-06-29 14:01:54

标签: sql oracle

做这样的事情

于2012年6月29日上午10:17编辑 我意识到我的查询比我的示例查询稍微复杂一点,当前的建议不会起作用,但这是我的错。我在原始版本上创建了一个更准确的查询。

SELECT DISTINCT
a,
max(b) as b,
(select count(distinct c) as c from d where e=2) as c
FROM d
GROUP BY a

来自d

的样本数据
 a | b | c | e
---+---+---+---
 0 | 0 | 0 | 1
 0 | 0 | 0 | 2
 1 | 0 | 0 | 1
 1 | 0 | 0 | 1

所以对于这组数据,其中a = 0 c将是1的计数(其中e == 1) 对于a = 1 c,计数为2(其中e == 1)

编辑结束

SELECT
a,
b,
(SELECT c from d where e=2)
FROM d

或者至少是否有更好的方法来明智地表现这种表现?也许像工会一样。

3 个答案:

答案 0 :(得分:2)

如果我理解你的要求,那么这将有效:

SELECT
  a,
  b,
  case
    when e=2 then c
    else null
  end as c
FROM
  d

答案 1 :(得分:0)

根据新信息,试试这个:

SELECT a,
       max(b) as b,
       sum(case when e=2 then 1 else 0 end) as c
FROM d 
GROUP BY a

答案 2 :(得分:0)

据我了解,您希望按a进行分组。对于每个组,您希望最大值为b,并且您希望知道c行中e=2的不同值的数量。

其他答案在使用CASE时有正确的想法,但没有解决您想要计算不同的值。我认为这就是你要找的东西:

SELECT a, MAX(b), COUNT(DISTINCT CASE WHEN e=2 THEN c else NULL end)
  FROM d
  GROUP BY a

(目前您的问题尚不清楚您所追踪的e的值是1还是2;我在上面的查询中选择了2。)