2012-06-06 2 views
0

Я пишу запрос базы данных, который покажет мне, где есть место для парковки. Он используется только в июле.SQL Query для доступа к базе данных

Существует одна таблица, которая показывает все пространства и арендуется ли они в тот день. Существует еще одна таблица, в которой есть пробелы и их размеры. Я хочу иметь возможность выбирать те пространства, которые доступны в течение всех дней в течение выбранного периода времени, и иметь правильный размер.

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

SELECT C.Plads, SUM[C.optaget] C.[ledlig] FROM 
    (SELECT Plads FROM OptagetPladser AS A Inner JOIN Bådpladser as B ON 
    A.plads=B.Pladsnummer 
    WHERE 
    (A.dato>=" + Startdato + "and A.dato<="+Slutdato+") //checking the time period 
    and (a.optaget = 0))       //0 means the space is availible 
    as C 
    GROUP BY C.Plads 
    HAVING SUM(C.optaget) >="+ diffResult+")";//diff result is the timespan 

На данный момент я получаю ошибку

Синтаксическая ошибка (отсутствующий оператор) в выражении запроса 'SUM [C.optaget]'

Любые идеи?

+1

Замените [] на() в выражении SUM() :) – Arvo

+1

Какая база данных? SQL Server, Oracle, MySQL ...? – Fionnuala

+0

Опять же, это MS Access? SQL изменяется от версии к версии. – Fionnuala

ответ

2

Прежде всего, вы должны переработать свой SQL-запрос - он содержит слишком много простых ошибок.

Вот несколько.

  • Попробуйте добавить '' и внести некоторые изменения в запросе:

    SELECT C.Plads, SUM(C.optaget), C.ledlig FROM

  • Ваш подзапрос C не имеют optaget и ledlig поля тоже. Чтобы исправить это добавить эти поля сразу после sebquery-х SELECT

  • Исправлена ​​ошибка синтаксиса здесь:

    (A.dato>=" + Startdato + "and A.dato<="+Slutdato+"), который должен быть:

    (A.dato >= " + Startdato + " and A.dato <= "+Slutdato+")

  • Ваша последняя двойная кавычка является излишним, а также последний ')'. Удалить его:

    HAVING SUM(C.optaget) >= "+ diffResult+" ;//diff result is the timespan

Ниже, как ваш SQL-запрос должен выглядеть. Обратите внимание: в подзапросе C все еще отсутствуют поля optaget и ledlig.

SELECT C.Plads, SUM(C.optaget), C.ledlig FROM 
(
    SELECT Plads FROM OptagetPladser AS A 
    INNER JOIN Bådpladser as B 
    ON A.plads = B.Pladsnummer 
    WHERE (A.dato >= " + Startdato + " AND A.dato <= " + Slutdato + ") 
     AND (a.optaget = 0) 
) 
AS C 
GROUP BY C.Plads 
HAVING SUM(C.optaget) >= " + diffResult + "; 

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

+0

SELECT C.Plads, SUM (C.optaget) FROM (SELECT Plads FROM OptagetPladser AS A Inner JOIN Bådpladser как B ON A.plads = B.Pladsnummer ГДЕ (A.dato> = "+ Startdato +" и A.dato <= "+ Slutdato +") и (a.optaget = 0)) как C GROUP BY Plads HAVING SUM (optaget)> = "+ diffResult +") – DavyGravy

+0

Хорошо, но у вас все еще есть несколько ошибок опечатки и синтаксиса. Кроме того, где поле 'C.optaget'? Я предполагаю, что подзапрос 'C' не даст вам значение« optaget », отличное от 0, из-за этого условия:« AND (a.optaget = 0) ». Еще можно сказать: вы извлекаете только поле «Plads» из подзапроса, почему? Я думаю, вы должны переписать свой запрос. ' – gahcep

+0

Можете ли вы дать подробное описание таблицы и не могли бы вы дать английский перевод имен таблиц? – gahcep

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