J'ai trois tables: client strong> p> J'ai écrit une requête pour regrouper les transactions comme ceci: p> qui donne le résultat comme celui-ci: < / p> J'ai besoin du résultat d'une requête dans la forme matricielle comme ceci: strong> p> aidez-moi s'il vous plaît Pour obtenir le résultat ci-dessus dans SQL Server 2005. Utiliser des vues de mulitale ou même des tables temporories, c'est bien pour moi. P> P>
produit strong>
3 Réponses :
Vous pouvez utiliser SQL Server's Pivot opérateur
Customer Car Cycle Scooter Total Armstrong 80115.50 0.00 0.00 80115.50 Michelle 36571.85 15000.00 0.00 51571.85 Peterson 0.00 0.00 82658.23 82658.23 Ronald 0.00 25000.00 98547.52 123547.52 Schmidt 45000.65 0.00 54000.25 99000.90
Merci beaucoup pour la solution. Ma liste de produits n'est pas statique (l'utilisateur peut ajouter des produits). Au fur et à mesure que les produits grandissent, de nombreuses colonnes doivent être créées. De plus, les données sont dynamiques. Veuillez modifier la requête afin que je puisse interroger les données dynamiques.
@Nagesh, vous pouvez trouver différentes implémentations de pivotements dynamiques à notre propre propre alors elle-même. Regardez Stackoverflow.com/Questtions/213702/...
Est-il possible de réaliser cela en utilisant mysql
create table #Product (ProductID int,ProductName varchar(15)) insert into #Product values (1,'Cycle') insert into #Product values (2,'Scooter') insert into #Product values (3,'Car') create table #Customer (CustomerID int, CustomerName varchar(30)) insert into #Customer values (101,'Ronald') insert into #Customer values (102,'Michelle') insert into #Customer values (103,'Armstrong') insert into #Customer values (104,'Schmidt') insert into #Customer values (105,'Peterson') create table #Transactions (TID int,ProductID int,CustomerID int, TranDate smalldatetime,Amount decimal(18,2)) insert into #Transactions values (10001,1,101,'01-Jan-11',25000.00) insert into #Transactions values (10002,2,101,'02-Jan-11',98547.52) insert into #Transactions values (10003,1,102,'03-Feb-11',15000.00) insert into #Transactions values (10004,3,102,'07-Jan-11',36571.85) insert into #Transactions values (10005,2,105,'09-Feb-11',82658.23) insert into #Transactions values (10006,2,104,'10-Feb-11',54000.25) insert into #Transactions values (10007,3,103,'20-Feb-11',80115.50) insert into #Transactions values (10008,3,104,'22-Feb-11',45000.65) with temp as ( select cus.CustomerName,pro.ProductName, sum(trans.Amount) as Amount from #Transactions as trans inner join #Customer as cus on trans.CustomerID = cus.CustomerID inner join #Product as pro on trans.ProductID = pro.ProductID group by cus.CustomerName,pro.ProductName ) select CustomerName,isnull([Car],0)Car, isnull([Cycle],0)Cycle,isnull([Scooter],0) as Scooter, isnull([Car],0)+isnull([Cycle],0)+isnull([Scooter],0)as Total from temp pivot ( sum(Amount) for ProductName in ([Cycle],[Scooter],[Car]) )pot*
Nous pouvons créer une matrice à l'aide de pivot, Cela peut facilement faire avec des cadres de données
|product|P |Q |R |S | |B |null|null| 50| 50| |A | 10| 40|null|null|