Pergunta

Tenho um formulário que as pessoas podem usar para enviar e-mails aos nossos clientes.O usuário tem a opção de selecionar entre duas mensagens prontas (Mensagem "1" ou Mensagem "2").Nos bastidores, toda vez que eles clicam no botão "ENVIAR", ele se conecta a uma tabela "RECORDS" (desde que passe pelos manipuladores de erros).

Vamos fingir que a tabela RECORDS possui 2 colunas:

CUST_ID  EMAIL_NUM
0000         1
0000         2
0000         1
0000         1
0001         2
0002         1
0002         1
0003         2
0003         2
0003         2

Preciso de uma consulta que conte uns e dois para cada CUST_ID.Portanto, o conjunto de resultados deve ser parecido com isto:

CUST_ID  EMAIL_1_COUNT  EMAIL_2_COUNT
0000          3              1
0001          0              1
0002          2              0
0003          0              3

Eu usei contagem, agrupamento por, tendo, enquanto, união, seleções aninhadas, mas como eu disse, provavelmente estou complicando demais algo que é relativamente fácil.

Foi útil?

Solução

select
  CUST_ID,
  sum(iif(EMAIL_NUM = 1, 1, 0)) as EMAIL_1_COUNT,
  sum(iif(EMAIL_NUM = 2, 1, 0)) as EMAIL_2_COUNT
from
  RECORDS
group by
  CUST_ID

Outras dicas

Outra opção a considerar é usar uma consulta dinâmica com TRANSFORM

TRANSFORM NZ(Count(RECORDS.Email_NUm),0) AS CountOfEmail_NUm
SELECT RECORDS.CUST_ID
FROM RECORDS
GROUP BY RECORDS.CUST_ID
PIVOT RECORDS.Email_NUm;

No entanto, isto produziria cabeças de coluna de CUST_ID , 1, e 2.No entanto, se você tivesse outra tabela com os tipos de e-mail, talvez valesse a pena (especialmente se você tivesse um número maior de tipos de e-mail do que 2)

O SQL pode ficar assim

TRANSFORM NZ(Count(r.Email_NUm),0) AS CountOfEmail_NUm
SELECT r.CUST_ID
FROM RECORDS r
     INNER JOIN EMAIL_TYPES et
     ON r.Email_NUm = et.Email_NUm
GROUP BY r.CUST_ID
PIVOT et.TYPE_NAME;

Produzindo esta saída

   CUST_ID | Work | Home 
   -------   ----   ----
   0000    | 3    | 1
   0001    | 0    | 1
   0002    | 2    | 0
   0003    | 0    | 3
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top