2013-03-23 1 views
0

Кто-то может понять это ABL заявления ...SQL эквивалент «этого» ABL заявления

FOR EACH <table> BREAK BY <field as breakgroup>: 
    .... 
    IF FIRST-OF(<breakgroup>) THEN DO: 
     .... 
    END. 
    .... 
    IF LAST-OF(<breakgroup>) THEN DO: 
     .... 
    END. 
    .... 
END. 

Выше кода в основном перебирает отдельные записи в таблице, а затем запускает некоторые коды (....) в течение определенного части исполнения. Интересно отметить инструкцию FIRST-OF и LAST-OF, где значение <breakgroup> изменяется и полезно для агрегации данных.

Кто-нибудь знает, как реализовать/реплицировать ту же логику с помощью SQL, возможно, с помощью некоторых VBA?

ответ

2

Во-первых, стоит отметить, что SQL, вопреки OpenEdge ABL, не является 4GL. Он не должен «выполнять код» как таковой, поэтому вам придется использовать другой язык программирования для выполнения операторов SQL в отношении базы данных, получения выбранных записей и последующего манипулирования ими с помощью любого языка, который вы могли бы использовать.

Чтобы получить эквивалент ABL первой в или LAST-OF заявлении SQL FIRST() и функция LAST() пригодится (First() и Last() объяснить те.)

В принципе, это означает что вам нужно будет сделать как минимум три разных оператора SQL Select, которые, как я думаю, для выбора всех нужных записей в таблице, один для выбора первой из данной «группы» (в конце концов, группа - это всего лишь подсегмент записи, которые соответствуют определенным критериям), и один для выбора последней из такой группы. Для примера

SELECT LAST(CustomerType) WHERE CustomerType = "ValuedCustomer" 

Теперь, если вы хотите использовать VBA в качестве языка программирования, вы можете выполнять операторы SQL, например, с помощью команды, как это:

DoCmd.RunSQL "SELECT LAST(CustomerType) WHERE CustomerType = 'ValuedCustomer'" 

Here является запись MSDN для этой команды !

Надеюсь, что помогло!