Juntar valores

Tenho duas tabelas:

Pass => grava dados de utlização de cartoes
Pass100 => grava dados de venda a bordo => 100 - VENDA BORDO

Tenho os seguintes selects:

SELECT  
DISTINCT (Aplicacao) AS COD,
COUNT( Idaut ) AS PASS,
Carro
FROM Pass
WHERE 
Idguia = 63026

Resultado:

COD    PASS   CARRO
100      10      48004
400      130    48004
450      40      48004
700      5        48004
911      30      48004
SELECT  
DISTINCT (Aplicacao) AS COD,
COUNT( Idaut ) AS PASS,
Carro
FROM Pass100
WHERE 
Idguia = 63026

Resultado:

COD    PASS   CARRO
100      172      48004

Quero juntar os dois resultados:

COD    PASS   CARRO
100      182      48004
400      130    48004
450      40      48004
700      5        48004
911      30      48004

Tem como fazer?

Pode, mas depende da sua logica …

No caso voce esta dando o distinct pra pegar os unicos … no caso de do pass vier o codigo 100 e no pass100 tambem vier o codigo 100 do seu exemplo … quem prevalece?

Pois quando voce mostrou:

COD    PASS   CARRO
100      10      48004
400      130    48004
450      40      48004
700      5        48004
911      30      48004

e:

COD    PASS   CARRO
100      172      48004

E como voce falou união, o resultado deveria ser:

COD    PASS   CARRO
100      172      48004
100      10      48004
400      130    48004
450      40      48004
700      5        48004
911      30      48004

Mas voce colocou como resultado:

COD PASS CARRO 100 182 48004 400 130 48004 450 40 48004 700 5 48004 911 30 48004
E ai fiquei sem entender de onde veio o 182 :-p

Ainda acho que o que voce mais precisa melhor eh em banco de dados.
Com UNION voce resolve isso ai :-p
Talvez nao precise nem de union … se o codigo 100 é pra prevalecer o de pass100 … voce pode fazer um switch e se o codigo for 100, pegar o valor da tabela pass100 …

Depende da sua logica.

E como colocaria esse switch no select?

DIogo,

Fiz o UNION mas tenho cod 100 nas duas tabelas…

Queria somar a quantidade de cod 100 da tabela Pass com os cod 100 da tabela Pass100…

(SELECT DISTINCT(Aplicacao) AS APL, COUNT(Idaut) AS Pass, IdGuia, Carro, valor, turno FROM pass WHERE Idguia = 63206 GROUP BY Aplicacao) UNION (SELECT DISTINCT(gp.Aplicacao) AS APL, COUNT(gp.Idaut) AS Pass, gp.IdGuia, gp.Carro, gp.valor, gp.turno FROM pass100 gp WHERE gp.Idguia = 63206 GROUP BY Aplicacao)

Resultado:

“APL” “Pass” “IdGuia” “Carro” “valor” “turno”
“100” 172 63206 “48004” “220” “1”
“100” 10 63206 “48004” “220” “1”
“400” 133 63206 “48004” “220” “1”
“450” 14 63206 “48004” “0” “1”
“600” 3 63206 “48004” “0” “1”
“610” 4 63206 “48004” “0” “1”
“611” 1 63206 “48004” “0” “1”
“700” 3 63206 “48004” “0” “1”
“800” 36 63206 “48004” “0” “1”
“900” 15 63206 “48004” “0” “1”
“910” 6 63206 “48004” “0” “1”

Vou te dar so a ideia …

Seu codigo vai ser o original:

SELECT
DISTINCT (Aplicacao) AS COD,
COUNT( Idaut ) AS PASS,
Carro
FROM Pass
WHERE
Idguia = 63026

E voce vai fazer um switch case (tipo um if) de se o codigo for diferente de 100, retorna o proprio campo pass(count idaut), se o codigo for 100 voce vai somar o count com um select na tabela Pass100

http://dev.mysql.com/doc/refman/5.0/en/case-statement.html

Essa é a logica. Tem varias formas de fazer isso … dei apenas 1 exemplo.

Ainda afirmo que o ideal eh voce participar de um forum de banco. Seu problema ate agora … é com logica no banco.

Estou Quse dormindo aqui, vê se isso pode lhe ajudar… Abração!
Isso é um recurso técnico kkkkk

SELECT *
FROM   (

/*AS APLICAÇÕES 100 NÃO ENTRAM NESTE SELECT*/
SELECT DISTINCT(Aplicacao) AS APL, 
       COUNT(Idaut) AS Pass, 
       IdGuia,
       Carro, 
       valor, 
       turno
FROM   pass
WHERE  Idguia = 63206
AND    Aplicacao <> 100
GROUP BY Aplicacao

UNION

/*AS APLICAÇÕES 100 NÃO ENTRAM NESTE SELECT*/
SELECT DISTINCT(gp.Aplicacao) AS APL, 
        COUNT(gp.Idaut) AS Pass,
        gp.IdGuia,
        gp.Carro,
        gp.valor,
        gp.turno
FROM    pass100 gp
WHERE   gp.Idguia = 63206
AND     gp.Aplicacao <> 100
GROUP BY gp.Aplicacao

UNION

/*AQUI ENTRAM AS APLICAÇÕES 100, SOMENTE 100 (SOMANDO OS VALORES)*/
SELECT x.APL,
       SUM(Pass) Pass,
       x.IdGuia,
       x.Carro,
       x.valor,
       x.turno
FROM   ( SELECT DISTINCT(gp.Aplicacao) AS APL, 
                COUNT(gp.Idaut) AS Pass,
                gp.IdGuia,
                gp.Carro,
                gp.valor,
                gp.turno
           FROM pass100 gp
          WHERE gp.Idguia = 63206
            AND gp.Aplicacao       = 100
           GROUP BY Aplicacao) x
GROUP BY x.APL,
         x.IdGuia,
         x.Carro,
         x.valor,
         x.turno
) w
ORDER BY w.APL

como diz, sql eh uma arte, da pra fazer de tudo, é igual a javascript. da pra fazer tudo com jeitinho :-p

Verdade mesmo Diogo, por isso adoro SQL…
Leandro funcionou???

:slight_smile:

Rafael,

#1064 - Você tem um erro de sintaxe no seu SQL próximo a ‘OREDR BY w.APL’ na linha 55

Leandro foi corrigido, o erro ocorreu pq fiz direto aqui pelo forúm não criei as tabelas para fazer os teste, mas então funcionou… fora este “errinho” ???

Nao funcionou deu esse erro…

Vou verificar com calma e te falo…

Leandro era um erro de grafia escrevi errado ORDER BY, se você testar agora deve funcionar…

Abraço!!!

Rafael,

Desculpa a demora, pois são várias consultas ao mesmo tempo…

O select está funcionando, porém não executa a soma dos codigo 100 das tabelas PASS e PASS100.

[code]SELECT *
FROM (

/AS APLICAÇÕES 100 NÃO ENTRAM NESTE SELECT/
SELECT DISTINCT(Aplicacao) AS APL,
COUNT(Idaut) AS Pass,
IdGuia,
Carro,
valor,
turno
FROM guiaspassageiros
WHERE Idguia = 534
AND Aplicacao <> 100
GROUP BY Aplicacao

UNION

/AS APLICAÇÕES 100 NÃO ENTRAM NESTE SELECT/
SELECT DISTINCT(gp.Aplicacao) AS APL,
COUNT(gp.Idaut) AS Pass,
gp.IdGuia,
gp.Carro,
gp.valor,
gp.turno
FROM guiaspassageiros100 gp
WHERE gp.Idguia = 534
AND gp.Aplicacao <> 100
GROUP BY gp.Aplicacao

UNION

/AQUI ENTRAM AS APLICAÇÕES 100, SOMENTE 100 (SOMANDO OS VALORES)/
SELECT x.APL,
SUM(Pass) Pass,
x.IdGuia,
x.Carro,
x.valor,
x.turno
FROM ( SELECT DISTINCT(gp.Aplicacao) AS APL,
COUNT(gp.Idaut) AS Pass,
gp.IdGuia,
gp.Carro,
gp.valor,
gp.turno
FROM guiaspassageiros100 gp
WHERE gp.Idguia = 534
AND gp.Aplicacao = 100
GROUP BY Aplicacao) x
GROUP BY x.APL,
x.IdGuia,
x.Carro,
x.valor,
x.turno
) w
ORDER BY w.APL
[/code]

Resultado só o codigo 100 da tabela pass100:

"100";174;534;"48141";"235";"1"
"400";2;534;"48141";"0";"1"
"600";4;534;"48141";"0";"1"
"610";1;534;"48141";"0";"1"
"800";41;534;"48141";"0";"1"
"900";4;534;"48141";"0";"1"
"910";3;534;"48141";"0";"1"