使用Dynamics CRM的SQL报告时遇到问题

问题描述 投票:0回答:2

以下SQL代码创建一个两行表,其中一行包含发票,另一行包含付款。然而,这不是理想的代表。真正的目标是将其显示为声明,其中发票位于顶部,然后是按日期排序的付款列表。

根据显示的信息,是否可以编写查询来完成该任务? (随意请求更多信息)。有人可以建议一种方法吗?

这是SQL SELECT代码:

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
sql sql-server reporting-services dynamics-crm crm
2个回答
0
投票

关于原始查询有一些奇怪之处 - 帐户ID名称是否确实存在于Invoice表中,而不是Account表?从发票到账户的左外部联接也使得看起来好像没有相应账户的发票 - 假设反向更为正常,尤其是在报表报表中。

假设原始查询正确选择了所需数据,我建议:

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
投票

在我看来,付款信息应与发票在同一行。获得第二行的唯一方法是,如果您有两笔付款。由于您要对发票日期进行排序,因此两行将具有相同的日期并且彼此相邻排序。

根据您的说法,我的猜测是,如果没有付款和付款日期(如果有的话),您希望对发票日期进行排序。尝试:

Order by Coalesce(FilteredMag_Payment.mag_paymentdate, FilteredInvoice.createdon)
© www.soinside.com 2019 - 2024. All rights reserved.