2010-08-16 6 views
0

J'essaie de créer une déclaration comme rapport pour les factures, je l'ai jusqu'à présent qu'il affiche la facture et le montant dû et aussi le paiement s'il a été payé, j'ai tout cela dans un tableau avec la facture sur 1 ligne et les paiements sur un autre avec eux groupés. Ce que je dois vraiment faire, c'est de les faire trier par date et de les faire ressembler à une déclaration.J'ai des problèmes avec un rapport SQL pour Dynamics CRM

Est-ce encore possible que quelqu'un ait des idées sur ce que je pourrais faire pour y parvenir?

Voici mon instruction SQL Select actuelle.

SELECT  FilteredInvoice.accountidname, FilteredInvoice.createdon, FilteredInvoice.duedate, FilteredInvoice.invoicenumber, FilteredInvoice.statecodename, 
        FilteredInvoice.totalamount_base, FilteredMag_Payment.mag_paymentdate, FilteredMag_Payment.mag_amount_base, GETDATE() AS Today 
FROM   FilteredInvoice LEFT OUTER JOIN 
        FilteredAccount ON FilteredInvoice.accountid = FilteredAccount.accountid LEFT OUTER JOIN 
        FilteredMag_Payment ON FilteredInvoice.invoiceid = FilteredMag_Payment.mag_invoiceid 
WHERE  (FilteredInvoice.statecodename <> N'Canceled') 
ORDER BY FilteredInvoice.createdon 
+1

Oui, cela est possible - comment votre chute SQL actuelle peu de vos besoins? –

+0

Actuellement, il est en train de trier par la date de la facture et s'il y a un paiement, il est placé directement sous-total où je veux que les deux soient dans l'ordre de la date. – Simon

+0

utilisez-vous vraiment un tablier SSRS pour cela? Un objet de table SSRS ordinaire ne serait-il pas plus utile? –

Répondre

0

Il y a quelques bizarreries au sujet de la requête initiale - est le numéro de compte Nom vraiment tenu sur la table de la facture, plutôt que la table de compte? La jointure externe gauche de Invoice to Account donne également l'impression qu'il pourrait y avoir des factures sans comptes correspondants - il serait plus normal de supposer l'inverse, en particulier dans un rapport de déclaration.

En supposant que la requête initiale consiste à sélectionner correctement les données requises, je suggère:

SELECT FilteredInvoice.accountidname, 
    FilteredInvoice.createdon, 
    FilteredInvoice.createdon AS sort_date, 
    FilteredInvoice.duedate, 
    FilteredInvoice.invoicenumber, 
    FilteredInvoice.statecodename, 
    FilteredInvoice.totalamount_base, 
    CONVERT(datetime,NULL) AS mag_paymentdate, 
    0 AS mag_amount_base, 
    GETDATE() AS Today 
FROM FilteredInvoice 
LEFT OUTER JOIN FilteredAccount ON FilteredInvoice.accountid = FilteredAccount.accountid 
WHERE (FilteredInvoice.statecodename <> 'Canceled') 
UNION ALL 
SELECT FilteredInvoice.accountidname, 
    FilteredInvoice.createdon, 
    FilteredInvoice.createdon AS sort_date, 
    FilteredInvoice.duedate, 
    FilteredInvoice.invoicenumber, 
    FilteredInvoice.statecodename, 
    FilteredInvoice.totalamount_base, 
    FilteredMag_Payment.mag_paymentdate, 
    FilteredMag_Payment.mag_amount_base, 
    GETDATE() AS Today 
FROM FilteredInvoice 
LEFT OUTER JOIN FilteredAccount ON FilteredInvoice.accountid = FilteredAccount.accountid 
JOIN FilteredMag_Payment ON FilteredInvoice.invoiceid = FilteredMag_Payment.mag_invoiceid 
WHERE (FilteredInvoice.statecodename <> 'Canceled') 
ORDER BY 3 
0

Il me semble que les informations de paiement doivent figurer dans la même ligne que la facture. La seule façon d'obtenir une deuxième rangée est si vous avez deux paiements. Puisque vous faites un tri sur la date de facturation, les deux lignes auront la même date et seront triées les unes à côté des autres. Je suppose, d'après ce que vous avez dit, que vous voulez trier la date de facturation s'il n'y a pas de paiement et de date de paiement s'il y en a un. Essayez:

Order by Coalesce(FilteredMag_Payment.mag_paymentdate, FilteredInvoice.createdon) 
Questions connexes