错误 1242 (21000):子查询返回多于1行

3
我有一个如下的表格。
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

请帮助我

2个回答

2

试试这个:

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为'Monthly'的记录。这会导致问题,因为数据库只能在外部SELECT语句中使用一个值,现在它无法确定应该使用子查询返回的众多值中的哪一个值。因此会显示错误信息。
我采用的方法是删除子查询,并改用CASE表达式

1
你有没有注意到他的问题中没有叫做“Task_name”的列。我想我们两个都错过了 :) - DevelopmentIsMyPassion
@AshReva 很好的发现,但我认为该列是存在的。OP可能在问题中忘记提到了它。我有这个看法是因为当前的错误消息。否则,错误消息可能会是无效的列。 - Aziz Shaikh
我同意你的观点,因为他应该首先会遇到未知列错误而不是子查询错误。 - DevelopmentIsMyPassion

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

在你的查询中,不需要对活动表进行自连接操作。
这里是更新后的 链接描述

谢谢您的回复。根据我的需求,它几乎可以正常工作。但是有一件事情,如果某天没有每周/每月活动,我会得到Null值。我希望它应该像空白一样。 | 日期 | 每月 | 每周 | 任务状态 | | 2013-10-14 | NULL | 每周 RCA 跟踪器 | 已安排 | - Basudev
谢谢回复。我在某些字段中得到了空值。是否可能在该字段上保持空白而不是NULL? - Basudev
@user3114551 可以的。请查看我的回答中更新的fiddle和query。如果您满意,请接受答案。 - DevelopmentIsMyPassion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接