2013-06-20 6 views
2

Начну, разместив свой запрос ...SQL - Сумма в UNION запроса

SELECT [copyright status], 
sum(IIF(layer='key info',1,0)) AS [Key Info], 
sum(IIF(layer='approaches',1,0)) AS [Approaches], 
sum(IIF(layer='research',1,0)) AS [Research] 
FROM resources 
GROUP BY [copyright status] 

UNION 

SELECT [lw status], 
sum(IIF(layer='key info',1,0)) AS [Key Info], 
sum(IIF(layer='approaches',1,0)) AS [Approaches], 
sum(IIF(layer='research',1,0)) AS [Research] 
FROM resources 
WHERE [lw status] = 'In Reserve' 
GROUP BY [lw status] 

UNION 

SELECT [lw status], 
sum(IIF(layer='key info',1,0)) AS [Key Info], 
sum(IIF(layer='approaches',1,0)) AS [Approaches], 
sum(IIF(layer='research',1,0)) AS [Research] 
FROM resources 
WHERE [lw status] = 'Published' 
GROUP BY [lw status]; 

(Надеюсь, что легко читается)

Его работает, как я намерен это, тем не менее, я бы например, добавить в запрос еще одну функцию.

После первого запроса SELECT я хотел бы добавить дополнительный запрос, который суммирует каждую из трех сумм (Key Info, Approaches, Research). Синтаксис Я попытался добавления в распределились следующим образом:

<Previous Query> 
UNION 
SELECT, 
sum(IIF(layer='key info',1,0)) AS [Key Info], 
sum(IIF(layer='approaches',1,0)) AS [Approaches], 
sum(IIF(layer='research',1,0)) AS [Research] 
FROM resources 
UNION 
<Next Query> 

Однако, когда я пытаюсь запустить его, я получаю сообщение об ошибке, которое гласит: «Число столбцов в двух выбранных таблиц запросов запроса на объединение не совпадение."

Я не уверен, что я слишком амбициозен с этим.

Кроме того, существует ли более эффективный способ форматирования исходного запроса?

Если это имеет значение, значения в слое, статусе авторского права и статусе lw хранятся в отдельных таблицах и вносятся в таблицу ресурсов через комбинированное поле в режиме проектирования таблицы. Я использую Access 2003.

Если требуется дополнительная информация, пожалуйста, дайте мне знать.

Спасибо.

ответ

2

Количество столбцов должен быть одинаковым для всех частей union. Вы можете просто добавить null первый столбец для итоговой строки:

SELECT null, 
sum(IIF(layer='key info',1,0)) AS [Key Info], 
sum(IIF(layer='approaches',1,0)) AS [Approaches], 
sum(IIF(layer='research',1,0)) AS [Research] 
FROM resources 
+0

Такое простое решение, спасибо! – Squadinho

+1

@Squadinho: Имена столбцов задаются первой частью 'union', последующие части не могут ее изменить. Вы можете начать свой запрос с 'SELECT [статус авторского права] как Total,' – Andomar

1

Вы удалили lw status и ничего не выбрали:

UNION 
SELECT 'SUM', 
sum(IIF(layer='key info',1,0)) AS [Key Info], 
sum(IIF(layer='approaches',1,0)) AS [Approaches], 
sum(IIF(layer='research',1,0)) AS [Research] 
FROM resources 
UNION 
<Next Query> 
+0

Это было бы оставить 3 колонки, одна слишком мало – Andomar

+0

ага ТНХ, вместо 'липидного веса status', я буду править – mirkobrankovic

+0

Такое простое решение, спасибо! – Squadinho

1

Каждый ВЫБРАТЬ в UNION должны иметь одинаковое количество полей (4 в вашем случае). Возможно, просто добавьте поле «заглушка» в SELECT, например. НОЛЬ?

UNION 
SELECT 
    NULL, -- <- STUB (for padding only) 
    sum(IIF(layer='key info',1,0)) AS [Key Info], 
    sum(IIF(layer='approaches',1,0)) AS [Approaches], 
    sum(IIF(layer='research',1,0)) AS [Research] 
FROM resources 
UNION 
+0

Спасибо, не понял, что вы можете использовать NULL таким образом. – Squadinho

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