sql追加其他列

uxh89sit  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(296)

我的查询显示以下内容:

╔════════╦═════════╦══════════╦══════════╗
║ 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 2 以及 3 是重复的。
我想参加一个小组 buyerNo 以及 sellerNo 在同一个牢房里如果 itemNo 发现重复。 itemDesc 每一个都是相同的 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;
    }

然后被解析为我的主方法:

RadGrid1.DataSource = inventory.GetAllInventorySummary();
j8ag8udp

j8ag8udp1#

你必须使用 GROUPBY and GROUP_CONCAT 函数以实现预期的输出。

SELECT itemNo,
       group_concat(buyerNo),
       group_concat(sellerNo),
       itemDesc
FROM summary
GROUP BY itemNo
dxxyhpgq

dxxyhpgq2#

你只能试着分组 itemNo 以及 itemDesc ,然后使用 string.Join 连接字符串值。
您可以尝试使用linqtosql 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#演示
结果

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

编辑
因为linqtosql不能翻译成sql(感谢@panagiotiskanavos指出)
我建议您执行sql语句
EF SqlQuery 方法,可以使您的预期结果 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>();

相关问题