2013-12-18 3 views
2

У меня есть таблица, как показано ниже.ОШИБКА 1242 (21000): Подзапрос возвращает более 1 строки

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 

пожалуйста, помогите мне

ответ

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

ли вы заметили, что нет столбца называется TASK_NAME в своем вопросе. Я думаю, мы оба пропустили это :) – DevelopmentIsMyPassion

+0

@AshReva хороший улов, но я думаю, что колонка есть. ОП, возможно, пропустил упоминание об этом в вопросе. У меня есть это мнение из-за текущего сообщения об ошибке. В противном случае сообщение об ошибке могло бы быть чем-то вроде недопустимого столбца. –

+0

Я согласен с вами, так как у него сначала была бы ошибка неизвестного столбца, а не ошибка подзапроса – 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 

В вашем запросе не требуется самостоятельное присоединение к таблице действий.

Вот Обновлено enter link description here

+0

Спасибо за ваш ответ. это почти работает по моему требованию. Но одно дело в том, что я получаю значение Null, если в неделю нет еженедельной/месячной активности. Я хочу, чтобы он был пустым. | Дата | Ежемесячно | Еженедельно | Task_status | | 2013-10-14 | NULL | Еженедельный RCA Tracker | Запланированные | – Basudev

+0

Спасибо за ответ. Я получаю нулевое значение в некоторой области. возможно ли сохранить пустое поле в этом поле вместо NULL. – Basudev

+0

@ пользователь3114551 есть возможно. см. обновленную скрипту и запрос в моем ответе. Можете ли вы принять ответ, если вы удовлетворены. – DevelopmentIsMyPassion

Смежные вопросы