Как я могу посчитать количество записей с @DbColumn?
Я пытаюсь получить значение столбца для некоторых вычисляемых текстовых полей на странице, используя @DbColumn
,
Скажем, у меня есть представление под названием "По статусу", вот так:
+-------+--------+-----------+----------+------------+
| Count | Status | Created | Author | Comments |
+-------+--------+-----------+----------+------------+
| 134 | Open | | | |
+-------+--------+-----------+----------+------------+
| | | Records with "Status" = "Open"... |
+-------+--------+-----------------------------------+
| 101 | Hold | | | |
+-------+--------+-----------+----------+------------+
| | | Records with "Status" = "Hold"... |
+-------+--------+-----------------------------------+
...
Довольно понятен - он отображает все записи для базы данных по статусу и имеет счетчик (количество записей) для каждого статуса.
На моей странице у меня есть вычисляемое текстовое поле для каждого из статусов; Открыть, удерживать и т. Д. Я пытаюсь получить счет по статусу. Так, например:
@Text( @DbColumn( "Notes" : "ReCache" ; "" : "" ; "By Status"; 1 ) );
Это возвращает 134, что является счетчиком для статуса "Открыть". Я знаю, что это правильно для моего вышеупомянутого утверждения, однако, это не то, для чего я иду.
Как я могу получить значение "Count" для каждого "Status"? С помощью @DbLookup
возможно..?
2 ответа
Есть два разных способа сделать то, что вы хотите сделать. Сначала нужно сделать @DbLookup для каждого значения вашего статуса. Это будет выглядеть так (пример для статуса Open):
@DbLookup( "":"ReCache"; ""; "By Status"; "Open"; 1)
В зависимости от количества статусов, которые могут стать медленными.
Другой способ - создать столбец db в вычисляемом поле (это будет означать, что для этой цели будет взята форма, а не страница, но на самом деле это не проблема):
Поле с именем "allTotals", число, рассчитанное для отображения, допускает несколько значений, формула:
@DbColumn( "":"ReCache"; ""; "By Status"; 1)
И тогда в каждом значении для итогового статуса вам понадобится его позиция в представлении. Первый статус:
@Subset( @Subset( allTotals; 1 ) ; -1 )
Второй статус:
@Subset( @Subset( allTotals; 2 ) ; -1 )
...
И, конечно, могут быть другие, более сложные способы справиться с этим...
@DbLookup - одно из решений. Вы хотите настроить новое представление, где столбец "Состояние" является первым столбцом в представлении и отсортирован по алфавиту. Во втором столбце будет счетчик, и тогда ваша формула для получения счетчика, находящегося в состоянии ожидания, будет:
@DbLookup("Notes":"NoCache"; "":""; "NewView"; "Hold"; 2);
Вы также должны иметь возможность использовать @DbColumn для получения двух связанных списков.
Statuses := @DbColumn( "Notes" : "ReCache" ; "" : "" ; "By Status"; 2 );
Counts := @DbColumn( "Notes" : "ReCache" ; "" : "" ; "By Status"; 1 );
NumberOnHold := @Select(@Member("Hold"; Statuses); Counts);