Как сгруппировать с помощью битового столбца? - PullRequest
0 голосов
/ 30 мая 2020

данные моей таблицы

id  quota  
1  0  
1  NULL  
1  1  
2  0  
2  NULL  
3  NULL  

Результат I, кроме

id  quota  
1  1  
2  0  
3  NULL  

Результат, который я получаю:

id  quota  
1  1  
2  0  
3  0  

Я использую запрос:

 select id,count(id) count_id,
 case when max(coalesce(quota,0)) = 1 then 1
 when max(coalesce(quota,0)) = 0 then 0
 else null 
 end as quota from forbit group by i  

Мой тип данных для квоты столбца - бит.

Я хочу, чтобы каждый раз, когда максимум в группе равен 1, давать квоту как 1, всякий раз, когда максимум в группе равен 0, давать квоту как 0 и всякий раз, когда максимум в группа равна нулю, квота равна нулю. Я в основном хочу достичь NULL для идентификатора 3.

Подобное сообщение, которое я видел: Использовать столбец типа bit, чтобы различать группу по?

Ответы [ 2 ]

3 голосов
/ 30 мая 2020

Я думаю, что просто max - это то, что вы ищете, после преобразования в int, потому что max не работает на bit.

declare @Test table (id int, quota bit);

insert into @Test (id, quota)
values
(1, 0)
, (1, NULL)
, (1, 1)  
, (2, 0) 
, (2, NULL)  
, (3, NULL);

select id, max(convert(int,quota))
from @Test
group by id;  

Возвращает:

id  quota
1   1
2   0
3   NULL
0 голосов
/ 30 мая 2020

Кажется, вы слишком много думаете, вы можете сделать это с помощью простого запроса, как показано ниже:

select max(cast(quota) as int) as max_val, id
from test
group by id
...