当分组依据不包括数据时按列表显示数据

时间:2018-09-10 05:58:03

标签: sql sql-server group-by

我有一个这样的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和sum(TTMAmount)分组时,ID将按列表显示

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以将其存储在一个临时表中,也可以使用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