2010-10-25 122 views
-1

我星期五發布了(sql multiple count),並收到了一些回覆。Oracle SQL幫助

今天試圖實現它們,我不斷得到相同的錯誤。

我的SQL代碼現在是:

SELECT MBDDX_STUDY.STUDY_NAME, 
     COUNT(MBDDX_EXPERIMENT.STUDY_ID) 
AS  NUMBER_OF_EXPERIMENTS 
FROM MBDDX_STUDY 
INNER JOIN MBDDX_EXPERIMENT 
     ON MBDDX_STUDY.ID = MBDDX_EXPERIMENT.STUDY_ID 
INNER JOIN (SELECT COUNT(MBDDX_TREATMENT_GROUP.GROUP_NO) 
      FROM MBDDX_TREATMENT_GROUP) 
     ON MBDDX_TREATMENT_GROUP.STUDY_ID = MBDDX_STUDY.ID 
GROUP BY MBDDX_STUDY.STUDY_NAME 

我不斷收到錯誤:

ORA-00904: "MBDDX_TREATMENT_GROUP"."STUDY_ID": invalid identifier

是因爲它是內外部聯接支架,即超出範圍?我對SQL很陌生,無法理解它爲什麼不起作用。我可以使用select子查詢(無連接)工作,但我也希望能夠使用連接。

如果我使用Toad for Oracle很重要。

謝謝。

+1

與您最後一個問題相比,這裏似乎沒有任何新東西。請編輯/評論你以前的問題,而不是重新發布,如果它基本上是同一個問題。看到我的答案那裏不需要子查詢的方法。 – bobince 2010-10-25 11:21:05

+0

感謝鮑勃。我已經在另一個線程中使用了你的解決方案,它運行得很完美,比我想要的要乾淨得多。 – 2010-10-25 12:02:49

+0

可能重複的[sql multiple count](http://stackoverflow.com/questions/3997919/sql-multiple-count) – APC 2010-10-25 16:00:50

回答

4

因爲你加入查詢。爲該查詢命名,並參考它:

SELECT MBDDX_STUDY.STUDY_NAME 
    , COUNT (MBDDX_EXPERIMENT.STUDY_ID) 
AS  NUMBER_OF_EXPERIMENTS 
    FROM MBDDX_STUDY 
INNER JOIN MBDDX_EXPERIMENT 
    ON MBDDX_STUDY.ID = MBDDX_EXPERIMENT.STUDY_ID 
inner JOIN (SELECT study_id, COUNT (MBDDX_TREATMENT_GROUP.GROUP_NO) 
      FROM MBDDX_TREATMENT_GROUP group by study_id) AS my_query 
    ON my_query.STUDY_ID = MBDDX_STUDY.ID 
GROUP BY MBDDX_STUDY.STUDY_NAME 
+0

感謝您的答案,我剛剛嘗試過你的建議,現在說:ORA-00905:失蹤關鍵字,這是由AS my_query引起的?謝謝 – 2010-10-25 11:03:46

+0

對不起,我的答案有一個錯字。您可以檢查版本日誌或重新粘貼。 – Benoit 2010-10-25 11:07:03

+0

如果我放棄AS關鍵字,它將起作用。那麼,我說它是有效的。它沒有顯示我新的專欄。我想這是我的邏輯問題? – 2010-10-25 11:11:11

2

首先,子查詢必須有一個別名。變化:

​​

inner JOIN (SELECT COUNT (MBDDX_TREATMENT_GROUP.GROUP_NO) 
    FROM MBDDX_TREATMENT_GROUP) as CountAlias 
ON MBDDX_TREATMENT_GROUP.STUDY_ID = MBDDX_STUDY.ID 

的第二件事情是,你必須包括您計劃使用的所有列。現在,子查詢只選擇一個計數,但ON子句引用STUDY_ID。您可以修復通過在子查詢選擇列表STUDY_ID,如:

inner JOIN ( 
    SELECT STUDY_ID 
    ,  COUNT(MBDDX_TREATMENT_GROUP.GROUP_NO) as GroupCount 
    FROM MBDDX_TREATMENT_GROUP) as CountAlias 
ON MBDDX_TREATMENT_GROUP.STUDY_ID = MBDDX_STUDY.ID 

現在在這之後,你會打等問題,但我希望這將讓你開始。

+0

我喜歡這種結構化的方式來形成你的答案。 +1。 – Benoit 2010-10-25 11:07:43

+0

現在編譯爲: – 2010-10-25 11:08:25

+0

SELECT MBDDX_STUDY.STUDY_NAME ,COUNT(MBDDX_EXPERIMENT。STUDY_ID) AS NUMBER_OF_EXPERIMENTS FROM MBDDX_STUDY INNER JOIN MBDDX_EXPERIMENT ON MBDDX_STUDY.ID = MBDDX_EXPERIMENT.STUDY_ID INNER JOIN通過study_id)my_query ON my_query.STUDY_ID =(SELECT study_id,COUNT(MBDDX_TREATMENT_GROUP.GROUP_NO)AS Number_of_groups FROM MBDDX_TREATMENT_GROUP組MBDDX_STUDY.ID GROUP BY MBDDX_STUDY.STUDY_NAME但是,新列沒有顯示在表中?這是連接問題嗎?謝謝 – 2010-10-25 11:09:18