如果1列包含相同的数据,SQL追加其他列

时间:2018-09-27 06:53:24

标签: c# mysql asp.net radgrid

我的查询显示以下内容:

╔════════╦═════════╦══════════╦══════════╗
║ itemNo ║ buyerNo ║ sellerNo ║ itemDesc ║
╠════════╬═════════╬══════════╬══════════╣
║ 1      ║ B1      ║ S1       ║ Item1    ║
╠════════╬═════════╬══════════╬══════════╣
║ 2      ║ B2      ║ S2       ║ Item2    ║ 
╠════════╬═════════╬══════════╬══════════╣
║ 2      ║ B3      ║ S3       ║ Item2    ║ 
╠════════╬═════════╬══════════╬══════════╣
║ 3      ║ B4      ║ S4       ║ Item3    ║ 
╠════════╬═════════╬══════════╬══════════╣
║ 3      ║ B5      ║ S5       ║ Item3    ║ 
╚════════╩═════════╩══════════╩══════════╝

在上表中,itemNo 23是重复的。

如果发现buyerNo被复制,我想将sellerNoitemNo分组到同一个单元格中。每个itemDesc的{​​{1}}都相同。

itemNo

以下是我当前的查询:

╔════════╦═════════╦══════════╦══════════╗
║ itemNo ║ buyerNo ║ sellerNo ║ itemDesc ║
╠════════╬═════════╬══════════╬══════════╣
║ 1      ║ B1      ║ S1       ║ Item1    ║
╠════════╬═════════╬══════════╬══════════╣
║ 2      ║ B2, B3  ║ S2, S3   ║ Item2    ║ <-itemNo 2 combined
╠════════╬═════════╬══════════╬══════════╣
║ 3      ║ B4, B5  ║ S4, S5   ║ Item3    ║ <-itemNo 3 combined
╚════════╩═════════╩══════════╩══════════╝

然后将其解析为我的主要方法:

public IQueryable GetAllInventorySummary()
    {
        var query = from summary in dataContext.Q_TBL_INVENTORY_SUMMARIES

                    group summary by new
                    {
                        itemNo = summary.itemNo,
                        buyerNo= summary.buyerNo,
                        sellerNo= summary.sellerNo,
                        itemDesc = summary.itemDesc,

                    } into grp
                    select new
                    {
                        itemNo = grp.Key.itemNo ,
                        buyerNo= grp.Key.buyerNo,
                        sellerNo= grp.Key.sellerNo,
                        itemDesc = grp.Key.itemDesc,
                    };
        return query;
    }

2 个答案:

答案 0 :(得分:0)

您必须使用 <Drawer type="static" content={<Menu closeDrawer={ () => this.drawer.close() }/>} openDrawerOffset={100} tweenHandler={Drawer.tweenPresets.parallax} tapToClose={true} ref={ (ref) => this.drawer = ref} > <Router> <Scene key="gallery" /> <Scene key="logout" /> </Scene> </Router> </Drawer> 函数才能获得预期的输出。

GROUPBY and GROUP_CONCAT

答案 1 :(得分:0)

您可以尝试仅按itemNoitemDesc进行分组,然后使用string.Join连接字符串值。

您可以先尝试使用linq对来自数据库的SQL select数据进行处理,然后再使用linq group by

var summaryList = (from summary in dataContext.Q_TBL_INVENTORY_SUMMARIES
                       select summary).ToList(); 


var result = from i in summaryList
              group i by new
                {
                    itemNo = i.itemNo,
                    itemDesc = i.itemDesc

                } into grp
                select new
                {
                    itemNo = grp.Key.itemNo,
                    buyerNo = string.Join(",", grp.Select(i => i.buyerNo)),
                    sellerNo = string.Join(",", grp.Select(i => i.sellerNo)),
                    itemDesc = grp.Key.itemDesc
                };

c# demo

结果

1 B1 S1 Item1
2 B2,B3 S2,S3 Item2
3 B4,B5 S4,S5 Item3

编辑

由于 Linq-to-SQL 无法转换为SQL(感谢@Panagiotis Kanavos指出)

我建议您通过EF SqlQuery方法执行SQL语句,这可以使DB产生预期的结果。然后通过ORM进行绑定。

性能可能比我的第一个解决方案好。

创建一个SummaryDTO来携带结果数据。

public class SummaryDTO {
    public int itemNo { get; set; }
    public string buyerNo { get; set; }
    public string sellerNo { get; set; }
    public string itemDesc { get; set; }
}


var result = dataContext.Q_TBL_INVENTORY_SUMMARIES
        .SqlQuery("SELECT itemNo,
                           group_concat(buyerNo) buyerNo,
                           group_concat(sellerNo) sellerNo,
                           itemDesc
                  FROM summary
                  GROUP BY itemNo").ToList<SummaryDTO>();