我有一张如下表格。
Table Name:activity.
coloumn name:
activity_id,Date,assign_engr,Task_Type, Task_Status
1,2013-12-31,Sachin,Monthly,Scheduled
2.2013-12-23,Mikel,Weekly,Done
我需要一份类似以下格式的报告
Date Monthly Task Weekly Task Assign Engr Task_Status
我的查询如下:
select b.Date,(select a.Task_Name from activity a where a.Task_Type='Monthly' and a.Date=b.Date) AS Monthly,(select a.Task_Name from activity a where Task_Type='Weekly' and a.Date=b.Date) AS Weekly,b.Task_status from activity b;
显示以下错误。
ERROR 1242 (21000): Subquery returns more than 1 row
请帮帮我
答案 0 :(得分:1)
试试这个:
SELECT Date,
CASE
WHEN Task_Type='Monthly' THEN Task_Name
END AS Monthly,
CASE
WHEN Task_Type='Weekly' THEN Task_Name
END AS Weekly,
Task_status
FROM activity;
在当前查询中,您使用了子查询,例如select a.Task_Name from activity a where a.Task_Type='Monthly' and a.Date=b.Date
。从错误看,子查询返回多个记录,因为您的表可能有多个记录,其中task_type是“每月”。这会产生一个问题,因为数据库只能在外部SELECT语句中使用一个值,所以现在它无法确定应该从子查询返回的多个值中使用哪个值。因此会显示错误。
我使用的方法是删除子查询并改为使用CASE expression。
答案 1 :(得分:1)
select a.Date,Case when a.Task_Type='Monthly' Then a.Task_Name Else '' End as Monthly,
case when a.Task_Type ='Weekly'Then a.Task_Name Else '' End as Weekly,
a.Task_Status from activity a
在您的查询中,您不需要自行加入活动表。