Я работаю над программой ABAP. У меня есть таблица фильтров с парами ZFIELD и ZVALUE (например, «страна» + «DE», «дата» + «Q1.2014»). Мне нужно запросить эту таблицу и найти CID пар, соответствующих моим критериям фильтра. Чтобы проиллюстрировать это на примере:SQL-заявление в таблице фильтров/ABAP
Таблица ZFILTER (ИДС, FID, Zfield, Zvalue):
1, 1, "country", "DE"
1, 2, "country", "SE"
1, 3, "date", "Q1.2014"
Мои критерии фильтрации от переднего конца:
country=DE, date=Q1.2014
теперь я хочу найти все CID, где критерии фильтра совпадают, поэтому в этом случае страна соответствует в DE, а дата соответствует Q1.2014, а ожидаемое возвращаемое значение - CID = 1.
Я пробовал следующий запрос:
SELECT DISTINCT CID
FROM ZFILTER INTO TABLE LT_COMFILT
WHERE (ZFIELD = 'country' AND ZVALUE = 'DE' )
AND
(ZFIELD = 'date' AND ZVALUE = 'Q1.2014')
однако, очевидно, что это не дает мне никакого результата из-за и между операторами. Я предполагаю, что мне придется создать какой-то подзапрос, но я борюсь с этим в ABAP, поскольку он превосходит мой опыт Open SQL.
Есть ли лучший способ решить эту задачу или кто-нибудь может внести свой вклад в ее выполнение (возможно, с синтаксическим правильным примером подзапроса в Open SQL)? Надеюсь, это ясно, чего я хочу достичь.
Заранее благодарен!
Когда-то у меня был опыт, когда я использовал« для всех записей »с двумя полями, такими как вы, и я не получал все записи, все, что я получил из этого утверждения было только 1 запись за совпадение. –
nmiranda Итак, вы думаете, что «для всех записей» нарушено? Это было бы очень серьезным обвинением. Докажите это! Единственное серьезное предупреждение с 'для всех записей' заключается в том, что вы должны убедиться, что внутренняя таблица не является исходной. Вышеуказанное предложение должно работать. – rplantiko
В итоге я использовал комбинацию FOR ALL ENTRIES IN и цикл по парам ключ/значение фильтра. FOR ALL ENTRIES IN гарантирует, что я рассматриваю только те записи (CID), которые были найдены в предыдущих итерациях. –