Данные отображаются по списку, если группа по не включает данные

У меня есть такая команда sql

select mainPOID.EstAPDate,mainPOID.POID,TTm.ID,TTMAmount=TTMD.InvoiceAmount
From TTBeforeMms TTM
inner join  TTBeforeMms_Detail TTMD   on TTM.ID = TTMD.ID
inner join (
select  distinct main.EstAPDate,main_D.POID
From AP main
left join  AP_Detail  main_D on main.ID = main_D.ID
where  main.Type ='PA' and  main.EstAPDate between '2018/6/01' AND '2018/6/15' and  left(main_D.InvoiceNo,4) != '1111' ) mainPOID on TTMD.poid =mainPOID.POID and TTM.EstAPdate<=mainPOID.EstAPdate and  mainPOID.POID='CM3PU18030009'
order by mainPOID.EstAPDate,mainPOID.POID

sql результат понравится

enter image description here

У меня вопрос Как данные могут отображаться по списку, если группа по не включает данные?

Например

Идентификатор будет отображаться в виде списка, когда я группирую по EstAPDate, POID и сумме (TTMAmount)

enter image description here

0
0
44
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

есть много примеров CSV с использованием FOR XML PATH. Для вашего случая здесь я обертываю ваш существующий запрос в CTE, а затем оттуда генерирую строку CSV для ID

; with 
cte as
(
select      mainPOID.EstAPDate, mainPOID.POID, TTm.ID, TTMAmount=TTMD.InvoiceAmount
From        TTBeforeMms TTM
inner join  TTBeforeMms_Detail TTMD   on TTM.ID = TTMD.ID
inner join  (
                select  distinct main.EstAPDate,main_D.POID
                From    AP main
                     left join  AP_Detail  main_D on main.ID = main_D.ID
                 where  main.Type ='PA' 
                 and    main.EstAPDate between '2018/6/01' AND '2018/6/15' 
                 and    left(main_D.InvoiceNo,4) != '1111' 
            ) mainPOID  on TTMD.poid      = mainPOID.POID 
                       and TTM.EstAPdate <= mainPOID.EstAPdate 
                       and mainPOID.POID  = 'CM3PU18030009'
)
SELECT  EstAPDate, POID, 
        ID = STUFF(c.ID, 1, 1, ''),
        TTMAmount = SUM(TTMAmount)
FROM    cte 
        CROSS APPLY
        (
            SELECT ',' + ID
            FROM   cte x
            WHERE  x.EstAPDate = cte.EstAPDate
            AND    x.POID      = cte.POID
            FOR XML PATH ('')
        ) c (ID)
GROUP BY EstAPDate, POID
ORDER BY EstAPDate, POID
Ответ принят как подходящий

Вы можете хранить в одной временной таблице или использовать CTE

CREATE TABLE [dbo].#Columnss(
    espapdate date   ,
    poid  varchar(max),
    id  varchar(max),amount decimal(22,6))

GO
insert into #Columnss values('2018-06-15','cm3','pt20',19988.8900)
insert into #Columnss values('2018-06-15','cm3','pt21',265.8900)

    SELECT 
    REPLACE(ESPAPDATE,'-','/') ESPAPDATE, POID,
    STUFF(
        (SELECT ' , ' + OD.ID 
        FROM #COLUMNSS OD 
        WHERE OD.ESPAPDATE = O.ESPAPDATE
        AND  OD.POID = O.POID
        FOR XML PATH('')), 1, 2, ''
    ) PRODUCTNAMES,SUM(AMOUNT)AMOUNT
FROM #COLUMNSS O 
GROUP BY ESPAPDATE, POID

выход

   espapdate    poid    ProductNames    amount
    2018/06/15  cm3     pt20 , pt21     20254.780000

Другие вопросы по теме