SQL Server 2008,连接字符串?

时间:2013-01-28 11:23:42

标签: sql sql-server string concatenation

我已经浪费了整整两天的时间来试图解决这个问题,现在我已经忘记了,我需要一个紧急的帮助, 问题是, 我有桌子

表:销售额, 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('')

我无法连接细节字符串。

1 个答案:

答案 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:”字符串,您应该都很好去。