2012-01-17 1 views
2

У меня есть таблица, как этотКак найти подсчет нескольких записей с различными, где условия из одной таблицы

ID | cid |lightness | darkness  | color 
------|-------|-------------|--------------|--------- 
1  | 5  |10   | 20   | green 
2  | 5  |10   | 08   | green 
3  | 5  |10   | 10   | green 
4  | 5  |20   | 05   | green 
5  | 8  |10   | 20   | red 
6  | 8  |10   | 16   | red 
7  | 8  |33   | 20   | red 
8  | 5  |10   | 10   | green 

Я хочу, чтобы выяснить следующее:

  • графа записей, где цвет имеет светлоты 10
  • граф записей, где цвет имеет DARKness 20

Так выход должен be

Color | lightness | darkness | Total 
---------|-------------|------------|--------- 
green | 4   | 1   | 5 
red  | 2   | 2   | 4 
Total | 6   | 3   | 9 

Я пробовал запрос ниже, но он не приносит правильных результатов.

Select color, sum(lightness), sum(darkness) 
from colortable 
where cid in (5,8) 
and (lightness = 10 or darkness = 20) 
Group by color; 

ответ

1

Сохранить следующий SQL в качестве нового запроса, qryBaseCounts:

SELECT 
    sub.color, 
    sub.light_10, 
    sub.dark_20, 
    light_10+dark_20 AS light_plus_dark 
FROM [ 
     SELECT 
      color, 
      Sum(IIf(lightness=10,1,0)) AS light_10, 
      Sum(IIf(darkness=20,1,0)) AS dark_20 
     FROM colortable 
     WHERE 
      cid In (5,8) 
      AND (lightness=10 
      OR darkness=20) 
     GROUP BY color 
    ]. AS sub; 

Затем вы можете использовать qryBaseCounts в запросе UNION:

SELECT 
    q1.color, 
    q1.light_10 AS lightness, 
    q1.dark_20 AS darkness, 
    q1.light_plus_dark AS [Total] 
FROM qryBaseCounts AS q1 
UNION ALL 
SELECT 
    "Total", 
    Sum(q2.light_10) 
    Sum(q2.dark_20) 
    Sum(q2.light_plus_dark) 
FROM qryBaseCounts AS q2; 

Это выход Access 2007 из этого второго запроса, используя ваши данные образца для colortable:

color lightness darkness Total 
green   4  1  5 
red   2  2  4 
Total   6  3  9 
+0

Спасибо за ваш ответ. Можете ли вы рассказать мне, как можно изменить запрос, если столбец цвета является многозначным полем – Anthony

+0

Я избегаю многозначных полей. Я предлагаю вам создать новый вопрос, который включает это требование, и добавить пересмотренный образец входных данных. – HansUp

+0

Я тоже их ненавижу, но я имею дело с этой ужасной базой, которую я унаследовал. Выведет вопрос. Спасибо – Anthony

4

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

Select color, 
     sum(iif(lightness = 10, 1, 0)), 
     sum(iif(darkness = 20, 1, 0)), 
     count(*) 
from colortable 
where cid in (5,8) 
Group by color; 

Это не даст вам ряд итогов. Некоторые варианты SQL дают предложение WITH WITH ROLLUP или подобное, но не Access AFAIK. Вы можете использовать союз:

Select color, 
     sum(iif(lightness = 10, 1, 0)), 
     sum(iif(darkness = 20, 1, 0)), 
     count(*) 
from colortable 
where cid in (5,8) 
Group by color 

union 

Select 'Totals', 
     sum(iif(lightness = 10, 1, 0)), 
     sum(iif(darkness = 20, 1, 0)), 
     count(*) 
from colortable 
where cid in (5,8) 
+1

для общей сложности он может использовать COUNT (*) –

+0

К сожалению, имел в виду строки итогов, но я вижу из вашего комментария я пропустил колонку (и не удалось удалить ненужный фильтр). Теперь исправлены оба. Благодарю. –

+0

Хорошо. Для итоговой строки он может повторно выполнить запрос без 'group by color'. Но он выполнит два запроса –

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