C# 将行合并为列sql
是否有方法查询数据库,以便在列表中列出培训师计划,或者这是我们应该在Visual Basic中执行的操作 我被告知要用sql和/或visual basic来实现这一点,我曾尝试使用一些wierd for和foreach或while循环,但没有走多远。在这个项目中,我们应该只使用纯c#或sql 我当前创建了一个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
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型或错误的列引用?