10.11.2013, 01:48 | #1 |
Участник
|
Query одно условие по разным полям
Добрый день! Помогите новичку разобраться.
Есть таблица, назовем ее просто Table, среди полей которой есть несколько полей типа Дата. назовем их Date1, Date2, Date3 Мне надо построить Query который отберет из нее записи указанного диапазона дат, при том что дата начала или дата конца может быть и не указана. В общем что-то типа этого: if (fromDate || toDate) qbds.addRange(fieldnum(Table, Date1)).value(SysQuery::range(fromDate, toDate)); Но чуть позже мне потребовалось строить хитрое условие, при котором я должен выбирать запись, если значение Date1(если оно там есть) попадает в указанный диапазон (fromDate, toDate), а если там(в Date1) значения нет, то проверить входит ли в указанный диапазон Date2, если оно заполнено. То есть, если заполнено Date1 проверить на вхождение его в диапазон, а если там значения нет, проверить на то же самое поле Date2. Последний раз редактировалось Andy-k; 10.11.2013 в 02:13. |
|
10.11.2013, 08:07 | #2 |
Участник
|
__________________
// no comments |
|
|
За это сообщение автора поблагодарили: Andy-k (1). |
11.11.2013, 08:11 | #3 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Andy-k (1). |
11.11.2013, 13:01 | #4 |
Участник
|
|
|
11.11.2013, 19:28 | #5 |
Участник
|
Ребят, спасибо! После прочтения я понял, как мне этого не хватало до этого
|
|
28.01.2014, 17:50 | #6 |
Участник
|
вопрос по запросу
Подскажите, пожалуйста, такой синтаксис работает на MS DAX 4.0 ?
queryBuildRange.value(strFmt('((ItemType == %1) || (ItemId == "%2"))', any2int(ItemType::Service), queryValue("Item1"))); У меня ошибку выдает: Ошибка расширенного диапазона запроса: Синтаксическая ошибка рядом с 24. Может я что-то делаю не так? Цель запроса: отобрать основной договор и все подчиненные. X++: static void Job7(Args _args) { Query query = new Query(); QueryBuildDatasource qbds = query.addDataSource(tableNum(RContractTable)); QueryBuildRange qbr; QueryRun qr; RContractTable contractTable; ; qbr = qbds.addRange(fieldnum(RContractTable, RContractAccount)); qbr = qbds.addRange(fieldnum(RContractTable, ML_RContractParentAccount)); qbr.value(strFmt('((RContractAccount == %1) || (ML_RContractParentAccount == "%2"))', "Дог0001", "Дог0001")); qr = new QueryRun(query); while (qr.next()) { contractTable = qr.get(tableNum(RContractTable)); } } |
|
28.01.2014, 17:59 | #7 |
Участник
|
а вот так
X++: qbr.value(strFmt('((RContractAccount == "%1") || (ML_RContractParentAccount == "%2"))', "Дог0001", "Дог0001")); |
|
28.01.2014, 18:47 | #8 |
Участник
|
Цитата:
Возможно, проблема скрыта в этих строчках: qbr = qbds.addRange(fieldnum(RContractTable, RContractAccount)); qbr = qbds.addRange(fieldnum(RContractTable, ML_RContractParentAccount)); Но не пойму как по другому связать QueryBuildRange и QueryBuildDatasource. Последний раз редактировалось DAX13; 28.01.2014 в 18:56. |
|
28.01.2014, 18:51 | #9 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: DAX13 (1). |
29.01.2014, 07:22 | #10 |
Участник
|
В первом случае у вас нет двойных кавычек, а должны быть
X++: '((RContractAccount == "%1")...'
__________________
// no comments |
|
|
За это сообщение автора поблагодарили: DAX13 (1). |
29.01.2014, 14:59 | #11 |
Участник
|
В дополнение, видел рекомендации на форуме и в статьях (да и в ссылках выше это проиллюстрировано), что комплексные критерии лучше создавать на основе полей, которые обычно наименнее задействованых при запросах к этой таблице из бизнес-логики. Например, DataAreaId, TableId, реже, RecId.
В одной из статей выше сказано: "The range is then added, using the DataAreaId field on each table. Any field can be used, but using an unusual one such as DataAreaId helps remind a casual reader of the code that it's not a normal range." Последний раз редактировалось Cardagant; 29.01.2014 в 15:49. |
|
Теги |
query |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|