2 linhq linhq 于 2014.12.03 18:37 提问

如何在access中查询统计带分号的字符串数据?

有一表内容大致如下:
人员姓名 | 金额
甲;乙;丁; | 60
甲;乙; | 40
乙;丁; | 40
丙; | 20
求一查询,平均分金额后合计,可得新表如下:
人员姓名 | 金额
甲 | 40
乙 | 60
丙 | 20
丁 | 40

即原表中第一行甲乙丙三人平分60,乙得20;第二行甲乙二人平分40,乙得20;第三行同理,新表中乙合计得60。

3个回答

devmiao
devmiao   Ds   Rxr 2014.12.03 19:16

你的统计规则是什么,为什么甲是40?

xianfajushi
xianfajushi   2014.12.05 19:35
    string[] 数据 = { "甲;乙;丁;|60", "甲;乙;|40", "乙;丁;|40", "丙;|20" };
    Int32[] 值组 = 数据.Select(qq => qq.Split('|')[1]).Select(ww => int.Parse(ww)).ToArray();
    string[][] 分组 = 数据.Select(aa => aa.Split(';').Where(dd => !dd.Contains("|")).ToArray()).ToArray();
    string[][] 重组 = 分组.Select((ee, ind) => ee.Select(rr => rr + "|" + (值组[ind] / ee.Length).ToString()).ToArray()).ToArray();
    string[] 二一 = string.Join(" ", 重组.Select(yy => string.Join(" ", yy))).Split(' ');
    Char[] 单 = 二一.Select(uu => uu[0]).ToArray().Distinct().ToArray();
    string[][] 合 = 单.Select(ii => 二一.Where(oo => oo[0] == ii).ToArray()).ToArray();
    Int32[] 值 = 合.Select(pp => string.Join("-", pp.Select(ll => ll.Split('|')[1]))).ToArray().Select(kk => kk.Split('-').Select(jj => int.Parse(jj)).Sum()).ToArray();

            方法有多种,顺手联系LINQ,思路大概都一样,写法不同.
xianfajushi
xianfajushi   2014.12.05 19:36

练习LINQ
错别字更正

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!