簡體   English   中英

LinqJs - 使用不同計數進行分組

[英]LinqJs - Group by using distinct count

我正在使用 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>

嘗試這個:

 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' } ]; var statusData = Enumerable .From(data) .GroupBy(function(x) { return { appID: x.appID, appName: x.appName, dcID: x.dcID }; }, null, function(key, array){ key.DcCount = 1; //always equals to one since it is presented in GroupBy clause key.ProjectCount = array.Count(); return key; }, function(x){ return x.appID + '-' + x.appName + '-' + x.dcID; }) .ToArray(); console.log(statusData);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/linq.js/2.2.0.2/linq.js"></script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM