Pergunta

Eu postei na sexta -feira (SQL Multiple Count) e teve algumas respostas.

Tendo tentado implementá -los hoje, continuo recebendo o mesmo erro.

Meu código SQL agora é:

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

Eu continuo recebendo o erro:

ORA-00904: "mbddx_treatment_group". "Study_id": Identificador inválido

É porque está fora do suporte interno de junção, ou seja, fora do escopo? Sou muito novo no SQL e não consigo entender por que não funciona. Eu posso funcionar usando subconsposições selecionadas (sem junções), mas também quero trabalhar com junções.

Se importa algum, estou usando o Toad para Oracle.

Obrigado.

Foi útil?

Solução

Porque você se junta a uma consulta. Dê um nome a essa consulta e consulte a maneira assim:

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

Outras dicas

Por um lado, uma subconsulta deve ter um pseudônimo. Mudar:

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

para

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

A segunda coisa é que você deve incluir todas as colunas que planeja usar. No momento, a subconsência apenas seleciona uma contagem, mas o ON Referências da cláusula STUDY_ID. Você pode consertar isso incluindo STUDY_ID Na lista de seleção da subconeração, como:

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

Agora, depois disso, você pode enfrentar outros problemas, mas espero que isso faça você começar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top