Я довольно новичок в SQL. Я пытаюсь построить определенный запрос в Business Objects, вручную настроив SQL. У меня есть понимание новичком подзапросов, однако есть одна конкретная проблема, которая ускользает от меня. Я попытаюсь объяснить, используя пример кода:SQL-подзапрос: как обратиться к внешнему столбцу запроса в таблице SAME
SELECT
TBL1.ID
TBL1.Field1text
TBL1.Field2date
CASE WHEN
(
TBL1.Field1text = 'ValueTwo'
AND
TBL1.Field2date >= '30/11/2014'
/* Arbitrary date. I actually want this to be, for example,
"TBL1.Field2date minus 2 months where TBL1.ID is the same, and
TBL1.Field1text is ValueOne" */
)
THEN 'Match'
ELSE 'No Match'
END
As CutomColumnNameToShowMatches
WHERE
TBL1.Field1text = 'ValueOne'
AND
TBL1.Field2date BETWEEN '01/01/2015' AND '31/12/2015'
Так как вы можете видеть, я использую случай, когда положение в критериях выбора, чтобы вернуться пользовательское поле, которое показывает, есть ли совпадение или нет (поясняется ниже).
Исходная таблица содержит множество записей, в которых каждое значение поля11 связано с определенной датой (Field2date). Поле «ID» не является первичным ключом. Один и тот же идентификатор может использоваться для нескольких записей. Например, ID 52 может иметь несколько записей, все отображающие разные значения Field1text и связанные с ними Field2date. Со мной до сих пор? Хорошо.
Мой основной запрос возвращает список записей, в которых Field1text является «ValueOne». Это достаточно просто. Тем не менее, то, что я тогда хочу сделать, это определить - для каждого из этих записей:
«Take идентификационного номера поиск в таблице, и найти также имеют ли то же ID любые записи, где Field1text равняется ValueTwo, и где. Field2date этой записи ValueTwo находится в пределах 2 месяцев с момента Field2date записи ValueOne ". Если да, то верните Матч. Если нет, не возвращайте совпадение.
Все это имеет смысл? Пожалуйста, попросите меня уточнить, если необходимо.
Мои исследования пока показали, что какой-то JOIN может быть ответом: однако я не уверен, как это применимо в этой ситуации или даже если это будет правильный подход.
Приведенный выше код работает достаточно хорошо, но только с указанной датой в подзапросе. Мне нужен способ сделать эту переменную date и привязан к дате из записи ValueOne того же ID.
Обратите внимание, что мы все работаем из одной таблицы. Кроме того, поскольку я работаю в Business Objects, у меня нет возможности создавать и сохранять именованный запрос, например, в MS Access. Все должно работать из одного фрагмента кода SQL.
Благодарен за любую помощь! :)
Предложение 'FROM' поможет. –
Знание того, что действительно представляет собой ПК, также поможет. –
Также: Вы действительно имеете в виду «в течение двух месяцев» или вы имеете в виду «в течение 60 дней»? Семантика очень различна, так как 31 декабря *** *** *** в течение двух месяцев с 1 октября, хотя на 91 день позже. –