Проблема с работой SQL UNION - PullRequest
       0

Проблема с работой SQL UNION

1 голос
/ 21 октября 2010

У меня есть следующая таблица: alt text

Я пытаюсь создать запрос SQL, который возвращает таблицу, которая возвращает три поля: Год (ActionDate), Количество построенных (actiontype = 12), Количество потерянных (actiontype = несколько разных) По сути, ActionType - это код поиска. Итак, я бы получил что-то вроде:

       YEAR   CountofBuilt  CountofLost
        1905        30          18
        1929        12          99
        1940        60           1 
etc....

Я полагал, что для этого потребуются два оператора SELECT вместе с UNION. Я попробовал следующее ниже, но он только выплевывает две колонки (год и отсчет). Мое поле countLost не отображается

Мой sql в настоящее время (MS Access):

SELECT tblHist.ActionDate, Count(tblHist.ActionDate) as countBuilt
FROM ...
WHERE ((tblHist.ActionType)=12)
GROUP BY tblHist.ActionDate
UNION
SELECT tblHist.ActionDate, Count(tblHist.ActionDate) as countLost
FROM ...
WHERE (((tblHist.ActionType)<>2) AND
((tblHist.ActionType)<>3))
GROUP BY tblHist.ActionDate;

Ответы [ 2 ]

3 голосов
/ 21 октября 2010

Использование:

  SELECT h.actiondate,
         SUM(IIF(h.actiontype = 12, 1, 0)) AS numBuilt,
         SUM(IIF(h.actiontype NOT IN (2,3), 1, 0)) AS numLost
    FROM tblHist h
GROUP BY h.actiondate
1 голос
/ 21 октября 2010

Не следует использовать UNION для таких запросов. Есть много способов сделать то, что вы хотите, например Обновлено, чтобы соответствовать синтаксису доступа

SELECT tblHist.ActionDate,
COUNT(SWITCH(tblHist.ActionType = 12,1)) as countBuilt,
COUNT(SWITCH(tblHist.ActionType <>1 OR tblHist.ActionType <>2 OR ...,1)) as countLost
FROM ..
WHERE ....
GROUP BY tblHist.ActionDate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...