我有一个数据库,其中发票可以链接到多个订单。我希望将订单表中的多个结果放在一个单元格中,但是(这就是问题)我需要按照与主查询相同的方式过滤订单,而不在子查询中重写它们。我怀疑这是可能的,但实际上这个想法是尽可能地依赖主查询,主要是因为列是自动创建的,而且与条件无关。
查询:
SELECT [Invoice].INV_ID AS 'Invoice ID',
INV_TIT AS 'Invoice title',
(SELECT CAST((SELECT ORD_TIT + ' | ' FROM ORD WHERE ORD_ID IN ([Order].ORD_ID) FOR XML PATH('')) AS VARCHAR(MAX))) AS 'Order list'
FROM INV [Invoice]
JOIN INV_ORD [InvoiceOrder] ON [Invoice].INV_ID = [InvoiceOrder].INV_ID
INNER JOIN ORD [Order] ON [InvoiceOrder].ORD_ID = [Order].ORD_ID
WHERE [Invoice].INV_ID IN (29517, 30951, 42048)
AND [Invoice].INV_ISDEL = 0
AND [Order].ORD_DAT = GETDATE()
结果:
╔════════════╦════════════════╦═══════════════════╗
║ Invoice ID ║ Invoice title ║ Order list ║
╠════════════╬════════════════╬═══════════════════╣
║ 1 ║ Cinema tickets ║ 1 cinema ticket ║
║ 1 ║ Cinema tickets ║ 2 cinema tickets ║
║ 2 ║ Groceries ║ 1 toothbrush ║
║ 2 ║ Groceries ║ 5 shampoo bottles ║
╚════════════╩════════════════╩═══════════════════╝
期望的结果:
╔════════════╦════════════════╦════════════════════════════════════╗
║ Invoice ID ║ Invoice title ║ Order list ║
╠════════════╬════════════════╬════════════════════════════════════╣
║ 1 ║ Cinema tickets ║ 1 cinema ticket | 2 cinema tickets ║
║ 2 ║ Groceries ║ 1 toothbrush | 5 shampoo bottles ║
╚════════════╩════════════════╩════════════════════════════════════╝
答案 0 :(得分:0)
尝试:
create table #tmp (Id int,value1 varchar(max),value2 varchar(max))
insert into #tmp values
(1,'Cinema tickets','1 cinema ticket'),
(1,'Cinema tickets','2 cinema tickets'),
(2,'Groceries','1 toothbrush '),
(2,'Groceries','5 shampoo bottles')
SELECT Id,value1,STUFF(
(SELECT '|' + value2
FROM #tmp where Id=t.Id
FOR XML PATH (''))
, 1, 1, '') from #tmp t group by Id,value1