javascript - LinqJs - 使用非重复计数进行分组

标签 javascript sql linq linq.js

我正在使用 LinqJs 并尝试创建包含特定数据集的分组集。我已经用 MS-SQL 编写了查询,并希望获得一些帮助以将其转换为 LinqJs。我的主要问题是试图获得非重复计数。 这是我的带有示例表和数据的 SQL 查询。

declare @table TABLE(appID int,appName varchar(50), dcID varchar(20), projectID varchar(10))

INSERT INTO @table
values ('160146','TAP','GFTS2018123','P1'),('160146','TAP','GFTS2018123','P2')

select appID, appName, dcID, count(distinct(dcID)) as DcCount, count(distinct(projectID)) as ProjectCount 
from @table 
group by appID, appName, dcID

这是我不完整的 LinqJs 查询

var statusData = Enumerable.From(data).GroupBy(
                null,
                null,
                "{ AppID: $.AppID, AppName: $.AppName, dcID: $.dcID,DcCount: $$.Count('$.dcID'), projectCount:$$.Count('$.projectID') }",
                "$.AppID"
            ).ToArray();

我期望的输出是

appID   appName dcID        DcCount ProjectCount
160146  TAP     GFTS2018123 1       2

最佳答案

您可以链接 DistinctCount

DcCount: $$.Distinct('$.dcID').Count('$.dcID')

var data = [
        { appID: '160146', appName: 'TAP', dcID: 'GFTS2018123', projectID: 'P1' },
        { appID: '160146', appName: 'TAP', dcID: 'GFTS2018123', projectID: 'P2' },
        { appID: '160147', appName: 'TAP', dcID: 'GFTS2018123', projectID: 'P1' },
        { appID: '160148', appName: 'TAP', dcID: 'GFTS2018123', projectID: 'P2' },
        { appID: '160148', appName: 'TAP', dcID: 'GFTS2018124', projectID: 'P3' },
        { appID: '160148', appName: 'TAP', dcID: 'GFTS2018124', projectID: 'P3' },
        { appID: '160148', appName: 'TAP', dcID: 'GFTS2018125', projectID: 'P3' },
        { appID: '160149', appName: 'TAP', dcID: 'GFTS2018123', projectID: 'P2' }
    ],
    statusData = Enumerable
        .From(data)
        .GroupBy(
            null,
            null,
            "{ AppID: $.appID, AppName: $.appName, dcID: $.dcID, DcCount: $$.Distinct('$.dcID').Count('$.dcID'), projectCount: $$.Distinct('$.projectID').Count('$.projectID') }",
            "$.appID"
        )
        .ToArray();

console.log(statusData);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/linq.js/2.2.0.2/linq.js"></script>

关于javascript - LinqJs - 使用非重复计数进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48643269/

相关文章:

javascript - YouTube 流在播放器下方显示字幕

RoR 中的 Javascript View

c# - 如何使用 LINQ 转置二维集合中的维度?

javascript - 从 JSON 绑定(bind)每个表列(Head)的选择下拉列表,同时将 JSON 数据绑定(bind)到 HTML 表 Jquery

javascript - 重用功能删除项目

sql - 如何在SQL中的字符串中添加逗号and

sql - 在 SQL 子查询中使用多列

SQL 连接 : have all values from both sides with an accumulative condition (Presto/AWS Athena)

c# - 如何将两个列表的项目与 linq 进行比较?

c# - 如何在 C# 中从数据库检索时将 varBinary 转换为图像或视频