sql - 分组依据不包含数据时按列表显示数据
问题描述
我有一个这样的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结果会像这样
我的问题是当分组依据不包含数据时,数据如何按列表显示?
例如
ID 将按列表显示当我按 EstAPDate、POID 和 sum(TTMAmount) 分组时
解决方案
有很多使用 FOR XML PATH 的 CSV 示例。对于您的情况,我将您现有的查询包装在 CTE 中,然后从那里生成 ID 的 CSV 字符串
; 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
推荐阅读
- php - 如果数据库中不存在用户的电子邮件,则提醒并阻止数据保存到数据库中
- c - 手动添加位掩码与添加按位移位
- awk - 在 awk 不正确的情况下将十六进制转换为十进制(使用 --non-decimal-data 或 strtonum)
- r - R函数解析strsplit“下标越界”中的返回错误
- cordova - 如何调试在 Windows 10 上作为 UWP 运行的空白白屏 Ionic 4
- android - 如何仅为当前片段设置toolbar.setNavigationOnClickListener?
- sql - 在 SQL 查询中每 5 行更改一次列
- html - 如何让验证器允许空白?
- php - 基于选择选项值的循环形式
- jquery - Datetimepicker 渲染不正确