我正在尝试使用@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,这是状态“打开”的计数。我知道这对我上面的陈述是正确的,但是,这不是我想要的。
如何为每个“状态”获取“计数”的值?使用@DbLookup
或许..?
答案 0 :(得分:2)
有两种不同的做法,你想做什么。 首先是为你的状态的每个值做一个@DbLookup。这看起来像这样(状态为Open的例子):
@DbLookup( "":"ReCache"; ""; "By Status"; "Open"; 1)
取决于可能变慢的状态数。
另一种方法是在计算字段中执行dbcolumn(这意味着为此目的而不是页面采用表单,但这不是真正的问题):
名为“allTotals”的字段,数字,计算显示,允许多个值,公式:
@DbColumn( "":"ReCache"; ""; "By Status"; 1)
然后在特殊状态的总计的每个值中,您需要在视图中的位置。第一状态:
@Subset( @Subset( allTotals; 1 ) ; -1 )
第二状态:
@Subset( @Subset( allTotals; 2 ) ; -1 )
...
当然,可能还有其他更复杂的处理方法......
答案 1 :(得分: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);