2015-09-10 2 views
0

Я собираю отчет SSRS, который покажет, что люди обязаны своим членским взносом.SSRS Объединение нескольких строк в один

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

Мне нужно показать их как одну строку вместо трех отдельных строк.

Мой список в настоящее время показывает, как:

Member ID | Name | Date | Dues | Refund | Late Fee | Inv ID | Total 
123456789 | John | 2015 | $150 | ------ | -------- | INV 01 | $150 
123456789 | John | 2015 | ---- | ------ | -----$10 | INV 01 | $10 
987654321 | Jane | 2015 | $150 | ------ | -------- | INV 02 | $150 

Что я хотел бы, чтобы показать, как:

Member ID | Name | Date | Dues | Refund | Late Fee | Inv ID | Total 
123456789 | John | 2015 | $150 | ------ | -----$10 | INV 01 | $160 
987654321 | Jane | 2015 | $150 | ------ | -------- | INV 02 | $150 

--Clarification-- Прямо сейчас единственный способ сказать, какой элемент есть, по описанию предмета; то есть, имя элемента будет представлять собой членские взносы, или членство в позднем взносе, или возврат заявки на членство, которые в конечном итоге создают разные позиции.

ответ

0

я, наконец, получил его на работу со следующим SQL:

WITH cte_Intial AS (
    SELECT 
     c.firstname 
     ,c.lastname 
     ,c.new_memberid 
     ,s.new_invid 
     ,CASE 
      WHEN sd.productidname LIKE 'Late%' THEN NULL 
      ELSE s.totalamount 
     END AS "Dues" 
     ,CASE 
      WHEN sd.productidname LIKE 'Late%' THEN s.totalamount 
      ELSE null 
     END AS "LateFee" 
     ,s.new_purchasedate 
     ,s.name 
     ,sd.productidname 
    FROM 
     Filteredcontact AS c 
     INNER JOIN FilteredSalesOrder AS s ON c.new_memberid = s.new_memberid 
     INNER JOIN FilteredSalesOrderDetail AS sd ON s.salesorderid = sd.salesorderid 
    WHERE 
     c.new_divisioncode = 'A' AND sd.productidname LIKE '%Dues%' AND 
     DATEPART(YEAR, CAST(s.new_purchasedate AS DATE)) = 2015 
) 
SELECT 
    firstname 
    ,lastname 
    ,new_memberid 
    ,ISNULL(MAX(Invoice), '')/* + ' ' + ISNULL(MAX(Late), '')*/ as Invoice 
    ,MAX(Dues) as Dues 
    ,MAX(LateFee) as LateFee 
    ,new_purchasedate 
    ,name 
FROM 
    cte_Intial 
GROUP BY 
    firstname 
    ,lastname 
    ,new_memberid 
    ,new_purchasedate 
    ,name 
0

Затем вам нужно агрегировать ваши данные:

select member_id, name, date, sum(dues) dues 
    , sum(refund) refund, sum(late_fee) late_fee 
    , inv_id, sum(total) total 
    from your_table 
group by member_id, name, date, inv_id; 
Смежные вопросы