2017-08-04 2 views
0

Bonjour, question sur la création d'un rapport en utilisant SQL. J'ai passé du temps à essayer de comprendre comment faire cela. Donc, voici le code ...Rapport SQL organiser les colonnes/lignes

select 
c.searchname as 'Client Name', 
w.Date as 'Date', 
j.Name as 'Engagement Name', 
j.JobID as 'Eng #', 
sum(units) as 'Hours', 
ca.Description as 'Description' 
from tblWip w 
join tblJob j on w.jobid=j.jobid 
join tblclient c on j.clientid=c.clientid 
join tblChargeAccs ca on w.chargeacid=ca.ChargeAcID 
where j.PartnerID='19' 
group by c.searchname, j.name, w.date, j.jobid, w.units, w.amount, ca.description 
order by c.searchname, w.date asc 

qui sort cette ...

enter image description here

Je veux formater la sortie pour être plus comme ça ...

enter image description here

Des suggestions sur la façon dont je peux réorganiser ces colonnes et rangées? Toute aide est appréciée. Merci pour la lecture!

+3

Tout d'abord, vous ne devez pas générer un rapport uniquement en SQL. Utilisez un outil frontal pour cela. Deuxièmement, si vous voulez le formater comme le rapport, vous devez pivoter sur la colonne date, et faire une somme sur Heures. Nous devons connaître votre système de base de données, et vous devez être conscient que la requête doit être faite dynamiquement, car vous ne savez pas quelles dates seront nécessaires. –

+0

Parfait, c'est ce que je voulais savoir. Je vous remercie! – MarkFro

Répondre

1

Les colonnes sont triées exactement comme vous le spécifiez dans la clause Select de votre SQL. Les lignes sont classées comme vous le spécifiez dans la clause Order By.

Donc, pour changer ceux-ci, il suffit de changer la façon dont vous écrivez ces deux clauses:

select c.searchname 'Client Name', 
    j.Name 'Engagement Name', 
    j.JobID 'Eng #', 
    sum(units) hours, 
from tblWip w 
    join tblJob j on w.jobid=j.jobid 
    join tblclient c on j.clientid=c.clientid 
    join tblChargeAccs ca on w.chargeacid=ca.ChargeAcID 
where j.PartnerID='19' 
group by c.searchname, j.name, w.date, 
    j.jobid, w.units, w.amount, ca.description 
order by c.searchname, w.date asc 

Obtenir les colonnes pour refléter la date et ayant une colonne distincte pour chaque date dans les données est plus difficile. Ceci est appelé Pivot ing les données. Google ceci car c'est un sujet qui lui est propre. La plupart des produits de base de données ont une fonction intégrée (dans SQL Server il est appelé Pivot) qui fera cela pour vous, mais vous devez lire les documents (un lien fourni) pour savoir comment l'utiliser correctement.

Si vous savez à l'avance pour quelles dates vous avez besoin de colonnes, vous pouvez l'écrire sans Pivoter dynamique. En utilisant vos données d'exemple:

select c.searchname 'Client Name', 
    j.Name 'Engagement Name', 
    j.JobID 'Eng #', 
    sum(case when w.Date = '25Jun2017' then units end) '25Jun2017hours', 
    sum(case when w.Date = '26Jun2017' then units end) '26Jun2017hours', 
    sum(case when w.Date = '27Jun2017' then units end) '27Jun2017hours' 
from tblWip w 
    join tblJob j on w.jobid=j.jobid 
    join tblclient c on j.clientid=c.clientid 
    join tblChargeAccs ca on w.chargeacid=ca.ChargeAcID 
where j.PartnerID='19' 
group by c.searchname, j.name, w.date, 
    j.jobid, w.units, w.amount, ca.description 
order by c.searchname, w.date asc 
+0

Merveilleux, c'est la feuille de route qui m'intéresse. Spécifiquement le pivotant. Merci d'expliquer cela! – MarkFro