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

时间:2016-06-27 11:20:27

标签: c# sql sql-server tsql

我在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个1-5)< / LI>
  • 不一定要有service_id值的完整补充(如上所示,service_id 3没有条目)
  • 就此问题而言,service_id条目数
  • 没有限制

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

ServicePricing
 - ServiceId
 - IEnumerable<DeliveryPricing>

,其中

DeliveryPricing
 - DeliveryId
 - PriceIncrease

从DB查询这些值然后使用C#解析它们的最简单方法是什么?我可以以相当简单但乏味的方式执行此操作,检查是否已在代码中声明service_id等等,但有没有办法对结果进行分组,以便我可以更容易地遍历它们并有一个明确的边界来声明其中任何一个类的新实例?

例如,是否可以将同一service_id的所有结果放入单个结果集中?

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

1 个答案:

答案 0 :(得分:0)

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);