C# 带条件的C群

C# 带条件的C群,c#,contains,sqldatareader,C#,Contains,Sqldatareader,如果账单10和4 b=7+4=11,所以极限为10->10和1 c和g不超过限制 meetingId | bill ------------------ a | 10 a | 4 b | 10 b | 1 c | 1 g | 2 我尝试了SQL为什么,但我坚持使用if条件 我的SQL: SELECT NO_ORDRE ,ORDRE.COD

如果账单<10,如何将数据分组为有条件的

我有一张桌子:

meetingId | bill
------------------
     a    |     6
     b    |     7
     c    |     1
     a    |     5
     a    |     3
     b    |     4
     g    |     2
预期成果: a=6+5+3=14极限为10->10和4 b=7+4=11,所以极限为10->10和1 c和g不超过限制

meetingId | bill
------------------
     a    |     10
     a    |     4
     b    |     10
     b    |     1
     c    |     1
     g    |     2
我尝试了SQL为什么,但我坚持使用if条件

我的SQL:

 SELECT NO_ORDRE
      ,ORDRE.CODE_CLIENT As CodeCl 
      ,[CODE_DEST]  
      ,ORDRE.RS_NOM As OrdreRS
      ,ORDRE.ADRESSE As OrdreAdr
      ,ORDRE.CP As OrdreCP
      ,ORDRE.VILLE As OrdreVille
      ,ENLEV_CREMB
      ,ENLEV_DECL
      ,MODAL_MODE
      ,[PAYS]
      ,[INSEE]
      ,[SIRET]
      ,ORDRE.TEL As OrdreTel
      ,ORDRE.FAX As OrdreFax
      ,[EMAIL]     
      ,[NBR_COLIS]
      ,[POID]   
      ,[OBS]
      ,[DATE_CREE]
      ,[DATE_MODIF]
      ,[REF_EXPED]
      ,[AUTRE_REF]
      ,[AGENCE]
      ,[TRANSPORTEUR]
      ,NOM
      ,CAPITAL
      ,LIBELLE
      ,T_LOGO.IMG As FaImg
      ,T_LOGO.ADRESSE As FaAdr
      ,T_LOGO.CP As FaCp
      ,T_LOGO.VILLE As FaVille
      ,T_LOGO.TEL As FaTel
      ,T_LOGO.FAX As FaFax
      ,FAWEB_CLIENT.RS_NOM As CliRsNom
      ,FAWEB_CLIENT.ADRESSE As CliAdr
      ,FAWEB_CLIENT.CP As CliCp
      ,FAWEB_CLIENT.VILLE As CliVille
  FROM [ORDRE]
  LEFT JOIN T_LOGO ON ORDRE.TRANSPORTEUR = T_LOGO.NOID
  LEFT JOIN FAWEB_CLIENT ON ORDRE.CODE_CLIENT = FAWEB_CLIENT.CODE_CLIENT
 WHERE (STATUT_ORDRE = 2) AND (TRANSPORTEUR IN (SELECT ParsedString From dbo.ParseStringList(@Trans)))
然后我用C

List<Pers_Ordre> oListOrdre = new List<Pers_Ordre>();
                while (readerOne.Read())
                {
                   Pers_Ordre oPerOrdr = new Pers_Ordre();
                   Pers_Ordre test =  (from t in oListOrdre where t.DestId == readerOne["CODE_DEST"].ToString() select t).FirstOrDefault();


                    oPerOrdr.OrdreId = Convert.ToInt32(readerOne["NO_ORDRE"]);
                    oPerOrdr.DestId = readerOne["CODE_DEST"].ToString();

                    if (test == null)
                    {
                        oListOrdre.Add(oPerOrdr);
                    }
                    else
                    {
                        int NbrColis = (from t in oListOrdre where t.DestId == readerOne["CODE_DEST"].ToString() select t.NbrColis).FirstOrDefault();
                        if (NbrColis < 5)
                        {
                            test.NbrColis += NbrColis;
                        }
                    }
                }
它没有达到我预期的效果


谢谢你的帮助

您不应该在客户端执行此操作,因为它可能会变得非常密集,一个带有HAVING子句的简单GROUP BY应该可以为您提供预期的结果:

SELECT meetingId, SUM(bill) as bill_total
FROM table
GROUP BY meetingId
HAVING SUM(bill) < 10
样本数据:

您需要的查询:

SELECT 
    MeetingID, 
    SUM(bill) AS Total
FROM 
    Table_1 
GROUP BY 
    MeetingID 
HAVING 
    SUM(bill) < 10
查询结果如下:


您不应该在客户端执行此操作,因为它可能会变得非常密集,一个带有HAVING子句的简单GROUP BY应该可以为您提供预期的结果:

SELECT meetingId, SUM(bill) as bill_total
FROM table
GROUP BY meetingId
HAVING SUM(bill) < 10
样本数据:

您需要的查询:

SELECT 
    MeetingID, 
    SUM(bill) AS Total
FROM 
    Table_1 
GROUP BY 
    MeetingID 
HAVING 
    SUM(bill) < 10
查询结果如下:


此SQL查询将返回所需的结果:

SELECT meetingId, SUM(bill) as bill_total
FROM table
GROUP BY meetingId
HAVING SUM(bill) < 10

此SQL查询将返回所需的结果:

SELECT meetingId, SUM(bill) as bill_total
FROM table
GROUP BY meetingId
HAVING SUM(bill) < 10
不是一个真正的答案,但这不适合在评论中。 下面是一个LINQ to Objects查询,该查询按meetingId对项目进行分组,并创建新项目,以便有一个项目的账单小于10,并且根据需要有多个项目的账单等于10,以保持总和:

这就是你要找的吗

代码:

不是一个真正的答案,但这不适合在评论中。 下面是一个LINQ to Objects查询,该查询按meetingId对项目进行分组,并创建新项目,以便有一个项目的账单小于10,并且根据需要有多个项目的账单等于10,以保持总和:

这就是你要找的吗

代码:


您使用的是什么版本的.NET?你能用LINQ吗?谢谢你的回复。我使用的是.NET的最新版本。您使用的是哪个版本的.NET?你能用LINQ吗?谢谢你的回复。我使用的是.nett的最后一个版本谢谢你,但是我需要a-10和a-2,因为a=5+4+3=12,c-10和c-2,因为c=11+1=12,d-10和d-2,因为d=12我只是在使用我的样本数据。谢谢你,但是我需要a-10和a-2,因为a=5+4+3=12,c-10和c-2,因为c=11+1=12,d-10和d-2,因为d=12我只是在使用我的样本数据。