将SQL Server结果分组为易于解析的结果集的最有效方法

本文关键字:结果 方法 有效 Server SQL 易于解 | 更新日期: 2023-09-27 17:51:24

我在SQL Server数据库中有以下数据:

service_id  delivery_id  price_increase
----------  -----------  --------------
    1             1           0.4
    1             2           0.3
    1             3           0.2
    1             4           0.1
    1             5             0
    2             1           0.4
    2             2           0.3
    2             3           0.2
    2             4             0
    2             5             0
    4             1           0.5
    4             2           0.3
    4             3           0.25
    4             4           0.15
    4             5             0

一些要点:

  • 所有service_id值将始终有delivery_id值的完整补充(即。,有要求有delivery_id s 1-5)
  • 不必是service_id值的完整补充(正如您在上面看到的,service_id 3没有条目)
  • 对于这个问题,service_id条目的数量没有限制

这些值将被解析为以下类层次结构:

ServicePricing
 - ServiceId
 - IEnumerable<DeliveryPricing>

,

DeliveryPricing
 - DeliveryId
 - PriceIncrease
从数据库中查询这些值,然后使用c#解析它们,最简单的方法是什么?我可以以一种相当琐碎但乏味的方式做到这一点,检查是否已经在代码中声明了service_id等等,但是是否有任何方法可以对结果进行分组,以便我可以更容易地循环它们并有一个明确的边界来声明任何一个类的新实例?

例如,是否有可能将来自相同service_id的所有结果放入单个结果集中?

[只是为了澄清,我正在寻找一个基于sql的建议,而不是如何在c#中解析结果集。]

将SQL Server结果分组为易于解析的结果集的最有效方法

select service_id,  delivery_id,  price_increase 
from table order by service_id,  delivery_id 
int? serviceID = null;
ServicePricing sp; 
List<ServicePricing> sps; 
while (rdr.Read())
{
   if(rdr.GetInt(0) <> serviceID)
   {
      if(sp != null) 
        sps.Add(sp);
      serviceID = rdr.GetInt(0);
      sp = new ServicePricing(serviceID); 
   }
   sp.DeliveryPricings.Add(new DeliveryPricing(rdr.GetInt(1), rdr.GetDecimal(2));
}
sps.Add(sp);