9
votes

Query SQL pour générer une matrice de type de sortie de sortie de la table associée à SQL Server

J'ai trois tables:
produit xxx

client xxx

transactions xxx

J'ai écrit une requête pour regrouper les transactions comme ceci: xxx

qui donne le résultat comme celui-ci: < / p> xxx

J'ai besoin du résultat d'une requête dans la forme matricielle comme ceci: xxx

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.


0 commentaires

3 Réponses :


12
votes

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


3 commentaires

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



1
votes
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*

0 commentaires

1
votes

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|


0 commentaires