Сгруппировать и устранить различные значения - PullRequest
0 голосов
/ 26 мая 2011

Сценарий 1:

Таблица:

id column1 column2
1  "bla"   "foo"
2  "bla"   "bar"

Я хочу сгруппировать по column1 и получить нулевое значение для column2, потому что во всех строках не одинаковое значение.

Сценарий 2:

Таблица:

id column1 column2
1  "bla"   "foo"
2  "bla"   "foo"

Я хочу сгруппировать по column1 и получить foo для column2, потому что все значения column2 равны.

Можно ли решить это с помощью оператора sql?

Ответы [ 2 ]

2 голосов
/ 26 мая 2011

Поскольку вы хотите сгруппировать по column1, один из способов узнать, имеет ли column2 все одинаковые значения, - проверить, если max(column2) = min(column2), поэтому это должно работать:

select column1, case 
                    when max(column2) = min(column2) then max(column2)
                    else null
                end as col2
  from tabletest
 group by column1;

Редактировать

Если ваш column2 не может принять значения null, тогда приведенный выше запрос в порядке, в противном случае вам понадобится следующий запрос для обработки случаев, когда column2 равен null:

select t.column1, case 
                      when (select max(1) from tabletest where column2 is null and column1 = t.column1) = 1 then null
                      when max(t.column2) = min(t.column2) then max(t.column2)
                      else null
                  end as col2
  from tabletest t
 group by t.column1;

Единственное отличие состоит в том, что нам нужно добавить условие case, чтобы охватить случай, когда column2 is null

0 голосов
/ 26 мая 2011

Попробуйте это:

select id = t.id ,
       col1 = t.col1 ,
       col2 = case when t1.N < 2 then t.col2 end
from myTable t
join ( select col1,N=count(distinct col2)
       from myTable
       group by col1
     ) t1 on t1.col1 = t.col1
...