C# 将行合并为列sql

C# 将行合并为列sql,c#,sql,visual-studio-2010,C#,Sql,Visual Studio 2010,是否有方法查询数据库,以便在列表中列出培训师计划,或者这是我们应该在Visual Basic中执行的操作 我被告知要用sql和/或visual basic来实现这一点,我曾尝试使用一些wierd for和foreach或while循环,但没有走多远。在这个项目中,我们应该只使用纯c#或sql 我当前创建了一个SQL查询: SELECT Trainers.ID, Trainers.FirstName, Trainers.LastName, Trainers.Phone, Tra

是否有方法查询数据库,以便在列表中列出培训师计划,或者这是我们应该在Visual Basic中执行的操作

我被告知要用sql和/或visual basic来实现这一点,我曾尝试使用一些wierd for和foreach或while循环,但没有走多远。在这个项目中,我们应该只使用纯c#或sql

我当前创建了一个SQL查询:

SELECT 
    Trainers.ID, Trainers.FirstName, Trainers.LastName, Trainers.Phone, 
    Trainers.Hours, TrainerPlan.PlanID
FROM 
    FitnessPlans 
INNER JOIN 
    (Trainers INNER JOIN TrainerPlan ON Trainers.ID = TrainerPlan.TrainerID) ON FitnessPlans.ID = TrainerPlan.PlanID;
其中列出了导致以下情况的培训师名单:

 ID FirstName  LastName Phone           Hours             PlanID
 --------------------------------------------------------------
 1  Calvin     Hodges   765-495-1234    MWF: 8 am - 4 pm    1
 1  Calvin     Hodges   765-495-1234    MWF: 8 am - 4 pm    2
 1  Calvin     Hodges   765-495-1234    MWF: 8 am - 4 pm    3
 1  Calvin     Hodges   765-495-1234    MWF: 8 am - 4 pm    4
 1  Calvin     Hodges   765-495-1234    MWF: 8 am - 4 pm    5
 1  Calvin     Hodges   765-495-1234    MWF: 8 am - 4 pm    6
 1  Calvin     Hodges   765-495-1234    MWF: 8 am - 4 pm    7
 1  Calvin     Hodges   765-495-1234    MWF: 8 am - 4 pm    8
 2  Brittany   Saxony   765-495-9876    TH: 8 am - 4 pm 3
 2  Brittany   Saxony   765-495-9876    TH: 8 am - 4 pm 5
 2  Brittany   Saxony   765-495-9876    TH: 8 am - 4 pm 6
 2  Brittany   Saxony   765-495-9876    TH: 8 am - 4 pm 7
 2  Brittany   Saxony   765-495-9876    TH: 8 am - 4 pm 8
 3  Jacob      Golden   765-495-1111    MTWHF: 4 pm - 12 am 1
 3  Jacob      Golden   765-495-1111    MTWHF: 4 pm - 12 am 2
 3  Jacob      Golden   765-495-1111    MTWHF: 4 pm - 12 am 3
 3  Jacob      Golden   765-495-1111    MTWHF: 4 pm - 12 am 4
 3  Jacob      Golden   765-495-1111    MTWHF: 4 pm - 12 am 5
 3  Jacob      Golden   765-495-1111    MTWHF: 4 pm - 12 am 6
 4  Lisa       Harris   765-494-0987    MTWHF: 4 pm - 12 am 3
 4  Lisa       Harris   765-494-0987    MTWHF: 4 pm - 12 am 5
 4  Lisa       Harris   765-494-0987    MTWHF: 4 pm - 12 am 6
 4  Lisa       Harris   765-494-0987    MTWHF: 4 pm - 12 am 7
 4  Lisa       Harris   765-494-0987    MTWHF: 4 pm - 12 am 8
应该是这样的:

  1 Calvin  Hodges  765-495-1234    MWF: 8 am - 4 pm    1,2,3,4,5,6,7,8
  2 Brittany    Saxony  765-495-9876    TH: 8 am - 4 pm 3,5,6,7,8
  3 Jacob   Golden  765-495-1111    MTWHF: 4 pm - 12 am 1,2,3,4,5,6
  4 Lisa    Harris  765-494-0987    MTWHF: 4 pm - 12 am 3,5,6,7,8
有什么想法吗?

您需要透视表

对于您来说,

您需要透视表


对你来说

尽管Anand建议了一个数据透视表,它通常与聚合函数(sum、min、max、avg等)相关联,但我认为它不适用于MySQL允许的“Group_Concat()”功能

然而,我确实找到了一个适合你的解决方案。。。尽管如此,还是进行了修改以满足您的需求

SELECT 
      T.ID, 
      T.FirstName, 
      T.LastName, 
      T.Phone, 
      T.Hours, 
      PreQueryPlans.AllPlans
   from
      ( select 
              TP.TrainerID, 
              stuff( (  select cast(',' as varchar(max)) + str(TP2.PlanID,3)
                           from TrainerPlan TP2
                           WHERE TP.TrainerID = TP2.TrainerID
                           order by TP2.PlanID
                           for xml path('') ), 1, 1, '') AS AllPlans
           from 
              TrainerPlan TP
           group by 
              TP.TrainerID ) PreQryPlans
      JOIN Trainers T
         on PreQryPlans.TrainerID = T.ID

尽管Anand建议使用一个数据透视表,它通常与聚合函数(sum、min、max、avg等)相关联,但我认为它不适用于MySQL允许的“Group_Concat()”功能

然而,我确实找到了一个适合你的解决方案。。。尽管如此,还是进行了修改以满足您的需求

SELECT 
      T.ID, 
      T.FirstName, 
      T.LastName, 
      T.Phone, 
      T.Hours, 
      PreQueryPlans.AllPlans
   from
      ( select 
              TP.TrainerID, 
              stuff( (  select cast(',' as varchar(max)) + str(TP2.PlanID,3)
                           from TrainerPlan TP2
                           WHERE TP.TrainerID = TP2.TrainerID
                           order by TP2.PlanID
                           for xml path('') ), 1, 1, '') AS AllPlans
           from 
              TrainerPlan TP
           group by 
              TP.TrainerID ) PreQryPlans
      JOIN Trainers T
         on PreQryPlans.TrainerID = T.ID

@威尔肯,好吧,但是什么错误。。。我是否有o型或错误的列引用?@Wilken,好的,但是什么错误。。。我是否有o型或错误的列引用?