2015-05-20 2 views
0

Я хочу, чтобы выбрать, где дело все данные в столбце отвечают условиям, как указано в псевдокоде:Выберите случай ALL при группировке в SQL

select 
    s.Id as Id, 
    SUM(CASE WHEN s.IsArchived=0 THEN 1 ELSE 0 END) as Days, 
    ALL(CASE WHEN s.IsArchived=1) AS IsArchived, -- Pseudo code 
    sum(s.Price) as Price 
from 
    Stuff s 
join 
    Other o 
on 
    s.FK_OtherId = o.Id 
where 
    sl.Derp is not null 
group by 
    s.Derp 

Как бы написать правильный синтаксис для столбца IsArchived для агрегирования значения 1, если все данные возвращают IsArchived = 1 в противном случае 0?

+0

Просьба представить некоторые примеры данных и желаемый результат. –

+0

Я понятия не имею, что вы подразумеваете под _All_. Прошу пояснить – Mackan

+0

Извините, если я не буду достаточно ясным. Это своего рода глупый вопрос, но я имел в виду, что все данные в сгруппированном столбце удовлетворяют условиям как IsArchived = 1. Похоже, @TimoSta пришел с правильным ответом. – gardarvalur

ответ

0

Попробуйте использовать MIN():

SELECT ... 
    MIN(s.IsArchived) as IsArchived, 
    ... 
FROM ... 

Предполагая, что s.IsArchived всегда либо 0, либо 1, он будет возвращать 0, если хотя бы одна из строк содержит значение 0 в этой колонке, в противном случае 1.

+0

Это сделал трюк, спасибо. Да, я не сказал в вопросе, но значение всегда 0 или 1, поэтому функция min() является идеальным решением для меня. – gardarvalur

Смежные вопросы