2013-12-18 102 views
2

我有一個像下面的表。ERROR 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好抓,但我認爲列是存在的。 OP可能錯過了在提問中提及的內容。我有這個意見是因爲當前的錯誤信息。否則,錯誤消息可能是像無效的列。 –

+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

感謝您的答覆。根據我的需求幾乎是工作的。但有一點是,如果一天沒有每週/每月的活動,我會得到空值。我希望它應該是空白的。 |日期|每月|每週| Task_status | | 2013-10-14 | NULL |每週RCA跟蹤| |預定| – Basudev

+0

感謝您的回覆。我在某些領域獲得空值。是否可以在該字段保留空白而不是NULL。 – Basudev

+0

@ user3114551是可能的。在我的答案中查看更新的小提琴和查詢。如果你滿意,你能接受答案嗎? – DevelopmentIsMyPassion

相關問題