0

SQLコードを取得してカウントフィールドを挿入し、クエリを実行して行数を返す関数があります。目的は、動的 SQL コードを作成し、コードに関係なくレコード数を取得できるようにすることです。これは、レジストリ フィルター ウィンドウで使用し、ユーザーがいくつでも追加できるため、どのコードが生成されるかがわからないためです。彼/彼女が望むようにフィルタリングします。

しかし、節を使用すると、多くの接続group byで使用されているためにメイン レジストリが表示される回数をカウントしているため、結果が間違っています。join

上記のコードの結果は、結果としての列を含む 1 つの行のみである必要がありますが、最初の行に a があり、他の行に a がある10最初の列を持つ新しいテーブルを取得します。21

句を外すとカウント結果としてgroup byを受け取りますが、最初の行は 2 回カウントされます。11

単一の行と正しい数を取得するにはどうすればよいですか?

SELECT 
 COUNT(*) QUERYRECORDCOUNT, // this line appears only in the Count() function 
 ARTISTA.*,
 CATEGORIA.NOME AS CATEGORIA,
 ATIVIDADE.NOME AS ATIVIDADE,
 LOCALIDADE.NOME AS CIDADE,
 MATRICULA.NUMERO AS MAP

FROM
 ARTISTA
 LEFT JOIN PERFIL ON PERFIL.REGISTRO = ARTISTA.ARTISTA_ID
 LEFT JOIN CATEGORIA ON CATEGORIA.CATEGORIA_ID = PERFIL.CATEGORIA
 LEFT JOIN ATIVIDADE ON ATIVIDADE.ATIVIDADE_ID = PERFIL.ATIVIDADE
 LEFT JOIN LOCALIDADE ON LOCALIDADE.LOCALIDADE_ID = ARTISTA.LOCAL_ATIV_CIDADE
 LEFT JOIN MATRICULA ON MATRICULA.REGISTRO = ARTISTA.ARTISTA_ID

WHERE 
 ((ARTISTA.SIT_PERFIL <> 'NORMAL') AND (ARTISTA.SIT_PERFIL <> 'PRIVADO'))
GROUP BY
 ARTISTA.ARTISTA_ID
ORDER BY 
 ARTISTA.ARTISTA_ID;
4

2 に答える 2

4

これにより、クエリの行数が常にわかります。

Select count(*) as rowcount from
(

     Paste your query here

) as countquery
于 2012-11-13T19:55:12.240 に答える
3

あなたは GROUPING BYARTISTA.ARTISTA_IDであるCOUNT(*) QUERYRECORDCOUNTため、各値のレコード数を返しARTISTA.ARTISTA_IDます。

GLOBAL カウントが必要な場合は、ネストされたクエリを使用する必要があります。

SELECT COUNT(*) AS QUERYRECORDCOUNT 
    FROM (SELECT 
     ARTISTA.*,
     CATEGORIA.NOME AS CATEGORIA,
     ATIVIDADE.NOME AS ATIVIDADE,
     LOCALIDADE.NOME AS CIDADE,
     MATRICULA.NUMERO AS MAP

    FROM
     ARTISTA
     LEFT JOIN PERFIL ON PERFIL.REGISTRO = ARTISTA.ARTISTA_ID
     LEFT JOIN CATEGORIA ON CATEGORIA.CATEGORIA_ID = PERFIL.CATEGORIA
     LEFT JOIN ATIVIDADE ON ATIVIDADE.ATIVIDADE_ID = PERFIL.ATIVIDADE
     LEFT JOIN LOCALIDADE ON LOCALIDADE.LOCALIDADE_ID = ARTISTA.LOCAL_ATIV_CIDADE
     LEFT JOIN MATRICULA ON MATRICULA.REGISTRO = ARTISTA.ARTISTA_ID

    WHERE 
     ((ARTISTA.SIT_PERFIL <> 'NORMAL') AND (ARTISTA.SIT_PERFIL <> 'PRIVADO'))
    GROUP BY
     ARTISTA.ARTISTA_ID
    ORDER BY 
     ARTISTA.ARTISTA_ID);

この場合、それらの多くの列を選択する必要はないかもしれません。

詳細を含むすべてのレコード数を取得する必要がある場合は、2 つの別個のクエリを使用することをお勧めします。

于 2012-11-13T19:57:35.830 に答える