Возникли проблемы с отчетом SQL для Dynamics CRM - PullRequest
0 голосов
/ 17 августа 2010

Следующий код 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

Ответы [ 2 ]

0 голосов
/ 17 августа 2010

Есть некоторые странности в исходном запросе - действительно ли имя идентификатора учетной записи хранится в таблице счетов, а не в таблице счетов?Левое внешнее объединение счетов-фактур и счетов также создает видимость счетов-фактур без соответствующих учетных записей - было бы более нормальным предполагать обратное, особенно в отчете по отчетам.

Если исходный запрос выбираетсянеобходимые данные правильно, я предлагаю:

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 голосов
/ 17 августа 2010

Похоже, информация об оплате должна быть в той же строке, что и счет.Единственный способ получить второй ряд, если у вас есть два платежа.Так как вы сортируете по дате выставления счета, обе строки будут иметь одинаковую дату и сортироваться рядом друг с другом.

Я думаю, из того, что вы сказали, вы хотите сортировать по дате выставления счета, если нет 't платеж и дата платежа, если он есть.Попробуйте:

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