2012-02-09 6 views
1

Понятно, что у меня есть таблица со списком фруктовых предметов. Я хочу, в одном запросе, увидеть количество яблок, апельсинов, «яблок или апельсинов» и «других фруктов».T-SQL COUNT 'A', 'B' и 'A or B'

Как я могу достичь этого в T-SQL?

+0

В качестве примера ваше название и описание подразумевают, что у вас может быть строка с одним значением, например «яблоки или апельсины» ... на основе ответа @ gbn, мы можем теперь предположить, что вы имели в виду не что вы сказали, и каждая строка будет иметь особое значение, такое как 'apple' или' orange' или 'kiwi' ... –

+0

@AaronBertrand Понятия в данных были бы слишком много объяснены. Я понимаю, но фрукты универсальны, и на них ответили эффективно. – Craig

+0

@AaronBertrand Если вы посмотрите на мои предыдущие вопросы, почти все из тех, у кого не отмечен ответ, были неправильно отреагированы. – Craig

ответ

9
SELECT 
    COUNT(*) AS Allfruits, 
    COUNT(CASE WHEN fruit = 'Apple' THEN 1 END) AS AppleCount, 
    COUNT(CASE WHEN fruit = 'Orange' THEN 1 END) AS OrangeCount, 
    COUNT(CASE WHEN fruit IN ('Apple','Orange') THEN 1 END) AS AppleOrOrangeCount, 
    COUNT(*) - COUNT(CASE WHEN fruit IN ('Apple','Orange') THEN 1 END) AS OtherFruitCount 
FROM 
    MyTable 

Примечание: CASE дает NULL без предложения ELSE или определенного явного состояния. COUNT игнорирует NULL.

+0

Отличный ответ! Upvoted! – Marco

+0

Красивые. Благодаря! Концепция, которую я пропустил, заключалась в том, чтобы поставить CASE внутри COUNT. Не думайте, что я это делал раньше. – Craig

+0

+1 для выяснения этого, учитывая туманную проблему (по крайней мере, для моих глаз). –

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