1. 程式人生 > >【第八篇】SAP HANA XS使用Data Services查詢CDS實體【二】

【第八篇】SAP HANA XS使用Data Services查詢CDS實體【二】

SAP HANA交流群:577202301

接上一篇,繼續

7、使用條件限制結果集。可以使用$ where()方法來設定限制查詢返回的結果集的條件。 以下示例顯示如何選擇淨額等於其訂單淨額的一半(或更多)的所有專案。

var qSelectedOrders =
 qOrderAndItemTitles.$where(soHeader.items.NETAMOUNT.
$div(soHeader.NETAMOUNT).$gt(0.5)) 
對諸如專案之類的欄位和關聯的引用可以作為實體建構函式的屬性,例如soHeader.items。 如在投影(projections)的情況下,XSDS會自動為條件引用的關聯生成所有必需的JOIN,即使它們不是當前投影(projections)的一部分。 要在$中建立更復雜的表示式。可參看前面介紹的API。

8、將查詢條件細化為特定的匹配模式。

使用$ matching()方法,可以使用$ find()和$ findAll()方法的類JSON格式的語法來指定條件表示式。 以下程式碼示例顯示瞭如何進一步優化結果集返回的選擇,例如,僅接受歐元貨幣和數量大於2的那些資料。

qSelectedOrders = qSelectedOrders.$matching({
 items: {
 CURRENCY: 'EUR',
 QUANTITY: {
 $gt: 2
 }
 }
});
9、向結果集中新增任意值。

可以使用$ addFields()方法將任意計算值新增到結果集中。 以下示例顯示如何查詢自交付銷售專案以來通過的天數。

qSelectedOrders = qSelectedOrders.$addFields({
 "DaysAgo": soHeader.items.DELIVERYDATE.$prefixOp("DAYS_BETWEEN", new
Date())
});

10、使用具有計算欄位的聚合。

彙總是將$ addFields()運算子與附加$ aggregate()方法組合的計算欄位的特殊情況。 以下示例顯示檢索前100個銷售訂單ID的平均數量及其產品ID。

var qAverageQuantity = soItem.$query().$limit(100).$aggregate({
 SALESORDERID: true,
 PRODUCTID: true
}).$addFields({
 averageQuantity: soItem.QUANTITY.$avg()
});
如果需要使用更具限制性的投影,則可以在$ aggregate呼叫中替換為false,如以下示例所示,將刪除結果集的銷售訂單ID。
var qAverageQuantity = soItem.$query().$limit(100).$aggregate({
 SALESORDERID: false,
 PRODUCTID: true
}).$addFields({
 averageQuantity: soItem.QUANTITY.$avg()
});

11、指定結果集的順序。

要在結果集中指定順序,可以使用$ order()方法,其中包括多個訂單條件作為引數。 每個訂單標準包含一個屬性“by”和一個定義所需順序的表示式。 可選地,每個標準可以包含標記$ desc以要求降序和$ nullsLast標誌。 以下示例使用兩個標準來首先按照標題中的淨值降序排列結果集,然後按專案淨值的順序顯示結果集。

qSelectedOrders = qSelectedOrders.$order({$by: soHeader.NETAMOUNT,
$desc:true},
 {$by: soHeader.items.NETAMOUNT});

12、從結果集中刪除重複項。

$ distinct運算子從結果集中刪除重複項。 以下示例顯示如何顯示銷售訂單中使用的所有貨幣的集合。

var qAllCurrencies = soHeader.$query().$project({CURRENCY: true}).$distinct();

到此結束關於SAP HANA XS使用Data Services查詢CDS實體的使用講解。