我已经浪费了整整两天的时间来试图解决这个问题,现在我已经忘记了,我需要一个紧急的帮助, 问题是, 我有桌子
表:销售额, SalesId 为primary key
---------------------------------------------------
SalesId | SalesDate | Customer| Discount | Remarks
---------------------------------------------------
1 | 01/01/2012| John | 15 | NULL
2 | 01/01/2012| Peter | 25 | NULL
3 | 01/01/2012| Micheal | 35 | NULL
表:SalesBody, SerialNo 为primary key
且 SalesId 为foreign key
---------------------------------------------------
SerialNo | SalesId | Product | Quantity | Rate
---------------------------------------------------
10 | 1 | Pencil | 18 | 20
11 | 1 | pen | 200 | 60
12 | 1 | Rubber | 150 | 10
13 | 1 | Paper | 500 | 2
14 | 2 | Mouse | 15 | 190
15 | 2 | KeyBoard | 10 | 600
16 | 2 | Monitor | 5 | 2000
17 | 3 | Mobile | 2 | 15000
现在我想进行一个可以产生如下结果的查询
----------------------------------------------------------------------------
SalesId | SalesDate | Details | Amount
----------------------------------------------------------------------------
1 | 01/01/2012 | Sold: Pencil x 18 @ 20, Pen x 200 @ 60| xxxxxxx
| | Rubber x 150 @ 10, Paper x 500 @ 2 |
2 | 01/01/2012 | Sold: Mouse x 15 @ 190, Keyboard x 10 |
| | @ 600, Monitor x 5 @ 2000 | xxxxxxx
3 | 01/01/2012 | Sold: Mobile x 2 @ 15000 | xxxxxxx
我尝试了不同的技术,例如。 Coalesce,Stuff,For XML PATH('')
我无法连接细节字符串。
答案 0 :(得分:6)
据我所知,您只需按SalesID
来旋转SalesBody表和组以下查询中的某些内容应该可以解决问题
select sb.SalesId, ( SELECT ', ' + sb2.Product + ' x ' + sb2.Quantity + ' @ ' + sb2.Rate
FROM SalesBody sb2
WHERE sb2.SalesId = sb.SalesId
FOR XML PATH('') ) AS Details
from SalesBody sb
group by sb.SalesId
然后只需将该查询与Sales表连接即可获取其他数据,并在上面查询中的详细信息上执行STUFF命令以删除前导“,”并添加“sold:”字符串,您应该都很好去。