0

Je ne suis pas sûr que cela tombe dans quelle catégorie mais je vais essayer de décrire ma situation et j'espère que quelqu'un peut me guider vers où je devrais être en train de lire et enquêter pour trouver une solution.Montrer les clients qui ont utilisé et n'ont pas utilisé un type de transaction spécifique d'une chaîne dans une période

je simplifier la conception de donner une idée sur le scénario

nous avons une transaction Tableau

Table 1 
| Transactions Table | 
------------------------- 
| Transaction ID  | 
| Year    | 
| Month    | 
| Channel   | 
| Transaction Type | 
| CustomerID   | 

Table 2 
| Customer  | 
-------------- 
| CustomerID  | 
| Name   | 
| More details .. | 

Now in table 1, i have data in the following format 

| Transaction ID | Year | Month | Channel | Transaction Type | CustomerID | 
|----------------|------|-------|---------|------------------|------------| 
| 1    | 2017 | 2  | 1  | Deposit   | c1  |  
| 1    | 2017 | 2  | 1  | Inquiry   | c1  | 
| 1    | 2017 | 2  | 1  | Withdraw  | c1  | 
| 1    | 2017 | 2  | 2  | Deposit   | c2  | 
| 1    | 2017 | 2  | 1  | Deposit   | c2  | 
|----------------|------|-------|---------|------------------|------------| 

Maintenant, les questions que je veux répondre - Combien de clients ont utilisé un canal spécifique et de transaction dans l'année 2017 mois 2, et combien n'ont pas utilisé ce type de transaction et dans quels canaux.

C'est plus comme signaler des choses où je peux savoir qui a utilisé et qui n'a pas utilisé une transaction spécifique dans un mois spécifique.

de sorte que le rapport devrait ressembler
- 2 Les clients ont utilisé le canal 1 en 2017 mois 1
- sur un total de 2 clients que nous avons, 1 ont le canal d'utilisateur 2, et n'ont pas utilisé 1 utilisateur il.

J'espère que c'est clair.

merci et très reconnaissant de bien vouloir tout soutien

Cordialement

+0

Dans Excel, vous pouvez probablement obtenir les informations à partir d'un tableau croisé dynamique. Ensuite, utilisez différentes techniques de manipulation de texte pour assembler ces phrases. Modifiez votre message lorsque vous avez essayé quelque chose, et rencontrez des problèmes et avez une question. Ou fournissez une réponse si vous développez une solution satisfaisante. –

+0

Salut, désolé je pense que je pourrais avoir donné une mauvaise idée de ce que je veux, je ne cherche pas de phrases, juste des chiffres normaux dans une table, et la chose avec Excel est-il ne peut pas gérer de grandes données, dans ce cas je parle 100s of 1000s of records – AmmarR

+0

Si vous n'êtes pas à la recherche d'une solution Excel, vous devez supprimer la balise Excel. –

Répondre

0

J'ai trouvé une inexactitude dans votre exemple table1, l'une des transactions, parce que vous avez là ID toutes les 1 Transactions (donc je don ne comprend pas si c'est le numéro de la transaction passée par un client, mais dans ce cas doit être unique, ou fait référence à un type de transaction, mais aussi dans ce cas il doit être unique, cela pourrait être simplement une façon d'être rapide et donnez-nous un exemple, mais à la place un ID en général est vraiment important dans une table, à la fois dans un D Operational ou DWH, comme il est utilisé comme référence, donc j'ai recréé yo ur le cas d'une façon plus précise et compréhensible way

--Transactions émis par votre client

create table TransactionT 
    ([ID] int, 
     [TransactionID] int, 
     [Y] date, 
     [Month]  int , 
     [Channel] int  , 
     [Transaction_Type] varchar(10), 
     [CustomerID] int 
    ) 

table --Service

create table Customer 
( [CustomerID] int, 
    [Name]  varchar(10) 
) 

-Transactions Type possible

create table TransactionList 
( [TransactionID] int, 
    [Transaction_Type] varchar(10) 
) 

- -en insérant quelques données dans ces tableaux

insert into Customer(CustomerID,Name) 
    values (1,'First'), 
     (2,'Second'), 
     (3,'Third'), 
     (5,'Jay'), 
     (6,'PiT'), 
     (4,'Marco'); 


insert into TransactionT (ID,TransactionID,Y,Month,Channel,Transaction_Type, 
CustomerID) 
    values (1,1,'2008-11-10',2,4,'Deposit', 2), 
     (2,2, '2008-11-11',3,4,'Inquiry', 2), 
     (3,3,'2008-11-14',3,4,'Withdraw', 2), 
     (4,1,'2017-11-15',3,4,'Deposit', 5), 
     (5,1,'2017-11-16',3,4,'Deposit', 6), 
     (6,3,'2017-11-16',4,5,'Withdraw', 6), 
     (7,1,'2017-11-16',3,4,'Deposit', 2), 
     (8,2,'2017-11-16',5,6,'Inquiry', 5), 
     (9,3,'2017-11-18',3,4,'Withdraw', 6), 
     (10,1,'2017-11-19',3,4,'Deposit', 3);  

insert into TransactionList(TransactionID,Transaction_Type) 
    values (1,'Deposit'), 
      (2,'Inquiry'), 
      (3,'Withdraw'); 

Pour répondre à votre première question (combien de clients ont utilisé un canal spécifique et de transaction en 2017 mois 2), je l'ai fait une solution plus générale, si convenable pour un mois, mais en appliquant simplement une condition where vous pouvez avoir le filtre pour un mois spécifique, vérifiez here:

select 
    count (Transaction_Type) as COUNT_TR, 
    count (Channel) as COUNT_CN, 
    count (C.CustomerID) AS COUNT_CS, 
    Transaction_Type, 
    Month, 
    Channel, 
    C.CustomerID 

from 
    TransactionT as T 
join Customer as C 
    on T.CustomerID = C.CustomerID 

group by Transaction_Type, Channel,month, C.CustomerID 

au lieu de votre deuxième, « et combien n'ont pas utilisé ce type de transaction et dans lequel les canaux. » a un certain degré de « l'information manque », en effet comment un client peut avoir utilisé un canal, si ce n'est pas une transaction? Je diveded alors la question en 2 étapes, à savoir les clients qui ne fait aucune transaction, et here SQL pour SQL Server:

select CustomerID from Customer 
    except (

    select distinct C.CustomerID from TransactionT C 
    left join TransactionT T 
    on T.CustomerID = C.CustomerID 
) 

Cela peut également être obtenu dans ce way

Au lieu de cela, si besoin connaître les clients qui n'ont pas fait une méthode de transaction particulière alors cela est moins intuitif et nécessite une sous-requête, car SQL Server ne supporte pas this, mais utilise logiquement this.

select distinct C.CustomerID,T.Transaction_Type 

from TransactionT T 

cross join Customer as C 

left join (

    select A.TID as TransactionID,A.T as Transaction_Type ,B.C as CustomerID 

from 
( 
select TransactionID TID,Transaction_Type T, C.CustomerID C 

from TransactionT T join Customer C 

on T.CustomerID = C.CustomerID 
) A join 
(
select TransactionID TID,Transaction_Type T, C.CustomerID C 

from TransactionT T join Customer C 

on T.CustomerID = C.CustomerID) B 

on A.C = B.C 


group by A.TID, A.T, B.C 

    ) sub 

on sub.TransactionID = T.TransactionID and sub.CustomerID = C.CustomerID 
where sub.TransactionID is null 

Comme vous pouvez le voir here

Hope this helps