2010-10-25 75 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