Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

montano

[Resolvido] UNION criando 2 fields

Recommended Posts

Bom dia, preciso fazer dois count em uma tabela com where distintos, quero usar um union para juntas os dois resultados

 

SELECT COUNT( cod ) AS ativadas
FROM contrato_pme
WHERE situacao
IN (

SELECT cod
FROM situacoes
WHERE representacao =  '1'
)
UNION 
SELECT COUNT( cod ) AS cumpridas
FROM contrato_pme
WHERE situacao
IN (

SELECT cod
FROM situacoes
WHERE representacao =  '1'
)
AND data_agendamento >= data_situacao

Porem ele me gera uma coluna 'Ativadas' com duas linhas uma representado 'ativadas' e a outra 'cumpridas' , Porque ele nao me cria a coluna 'cumpridas'? sei que para fazer union os campos selecionados tem que serem os mesmos, mas para o count tambem funciona assim? Teria como eu criar essa 2ª coluna no union?

 

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Via de regra, o comportamento do UNION terá esse mesmo resultado, veja bem o que você fez e qual foi o resultado:

 

mysql> use um
Database changed
mysql> create table t1(id int, ativada int, cumprida int);
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t1 values (1,1,0), (2,1,0), (3,0,0);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from t1;
+------+---------+----------+
| id   | ativada | cumprida |
+------+---------+----------+
|    1 |       1 |        0 |
|    2 |       1 |        0 |
|    3 |       0 |        0 |
+------+---------+----------+
3 rows in set (0.00 sec)

mysql> select count(id) from t1 where ativada  = 1
    -> union
    -> select count(id) from t1 where cumprida = 1;
+-----------+
| count(id) |
+-----------+
|         2 |
|         0 |
+-----------+
2 rows in set (0.08 sec)

No resultado acima, ele exibiu a contage dos resultado de ativadas e cumpridas em uma mesma coluna. Isso é como funciona o UNION. Agora, se você quer uma consulta que lhe traga duas colunas, uma ativada e outra cumprida, contendo como valor a contagem de um e de outro, faça uma consulta chamada REFRÊNCIA CRUZADA, assim:

 

mysql> SELECT
    ->   (SELECT COUNT(id) FROM t1 WHERE ativada  = 1) AS ATIVADA,
    ->   (SELECT COUNT(id) FROM t1 WHERE cumprida = 1) AS CUMPRIDA
    -> FROM t1 LIMIT 1;
+---------+----------+
| ATIVADA | CUMPRIDA |
+---------+----------+
|       2 |        0 |
+---------+----------+
1 row in set (0.00 sec)

Espero ter lhe ajudado, Happy MySQL'ing! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.