【问题标题】:SQL Server 2008, concatenating Strings?SQL Server 2008,连接字符串?
【发布时间】:2013-01-11 17:28:03
【问题描述】:

我已经浪费了整整 2 天的时间来尝试解决这个问题,现在我疯了,我需要紧急帮助, 问题是, 我必须要桌子

表:销售额,SalesIdprimary 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,SerialNoprimary keySalesIdforeign 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

我尝试了不同的技术,例如。合并,东西,用于 XML PATH('')

我无法连接详细信息字符串。

【问题讨论】:

标签: sql sql-server string concatenation


【解决方案1】:

据我所知,您只需要旋转 SalesBody 表并按 SalesID 分组

以下查询的内容应该可以解决问题

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 

然后只需将该查询与您的销售表连接以获取其他数据并在上面查询中的详细信息上执行 STUFF 命令以删除前导“,”并添加您的“已售:”字符串,您应该一切都很好去吧。

【讨论】:

  • 不错。要将前面的 , 替换为 Sold:,可以使用 STUFF((SELECT ...), 1, 1, 'Sold:') 之类的方法。
  • @Malik 查看我之前评论中的链接并接受此答案。另外你肯定需要访问about page
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多