汇总具有多个字段的数据库表

时间:2016-09-26 15:22:43

标签: f#

我尝试使用SQL个查询表达式汇总多个字段的F#表。摘要取决于表与另一个表成功连接并按日期过滤。我可以毫无问题地进行加入和过滤,但我通过在查询中添加一些摘要值来挑战:

let summarySalesQuery = 
    query {
        for header in db.SalesHeader do
        where (header.ORDERDATE.HasValue && header.ORDERDATE.Value > (System.DateTime.Parse "2014-01-01"))
        join row in db.SalesDetail
            on ((header.ORDERNUMBER).ToString() = row.ORDERNUMBER)
        let totQty = sumByNullable row.QUANTITY
        let totOrderCo = row.ORIGINALORDERCOMPANY.Count()
        select (totQty, totOrderCo)
} 

由于sumByNullable调用错误,此查询失败:

error FS3095: 'sumByNullable' is not used correctly. This is a custom operation in this query or computation expression.

但是,如果我使用此查询而不是单独使用sumByNullable

let summarySalesQuery = 
    query {
        for header in db.SalesHeader do
        where (header.ORDERDATE.HasValue && header.ORDERDATE.Value > (System.DateTime.Parse "2014-01-01"))
        join row in db.SalesDetail
            on ((header.ORDERNUMBER).ToString() = row.ORDERNUMBER)
        sumByNullable row.QUANTITY
        } 

返回单个值,可能是row.QUANTITY中所有值的总和:

val summarySalesQuery : Nullable<decimal> = 2333336M

尝试使用answers in this question

构建查询
let summarySalesQuery = 
    query {
        for header in db.SalesHeader do
        where (header.ORDERDATE.HasValue && header.ORDERDATE.Value > (System.DateTime.Parse "2014-01-01"))
        join row in db.SalesDetail
            on ((header.ORDERNUMBER).ToString() = row.ORDERNUMBER)
        groupBy row.ORDERNUMBER into group
        let totQty = query { for g in group do sumByNullable g.QUANTITY }
        select (group.Key, totQty)
        } 

产生错误

error FS0039: The field, constructor or member 'QUANTITY' is not defined

我无法解密,因为QUANTITY显然是可用的,给定前一个查询的返回值。

我想构建一个可以从dB中的表中返回多个汇总值的查询。如何构造一个查询,该查询连接,过滤和汇总数据库表上的多个字段,并返回要汇总的元组大小? -

注意: 我无法控制数据库中字段的类型,因此需要.ToString()和查询中所需的解析。 < / p>

0 个答案:

没有答案