【发布时间】:2015-01-01 06:53:27
【问题描述】:
产品
-----------------------------
| ProductId | ModelId |
|---------------------------|
| 12345 | A3666 |
| 12345 | A3667 |
| 12345 | A8999 |
| 12346 | A3666 |
| 12346 | A3667 |
-----------------------------
模型
-----------------------------
| ModelId | Name |
|---------------------------|
| A3666 | win |
| A3667 | xia |
| A8999 | vor |
-----------------------------
我正在尝试以这种方式获取输出:
-----------------------------------
| ProductId | Models |
|---------------------------------|
| 12345 | win,xia,vor |
| 12346 | win,xia |
-----------------------------------
我的代码是:
SELECT
p.ProductId,
STUFF
(
(
SELECT ',' + Name
FROM models m
WHERE m.ModelId=p.ModelId
ORDER BY Name
FOR XML PATH(''), type
).value('.', 'varchar(max)'), 1, 1, ''
) AS ModelNames
FROM
products p
给出 o/p :
-----------------------------
| ProductId | ModelNames |
|---------------------------|
| 12345 | win |
| 12345 | xia |
| 12345 | vor |
| 12346 | win |
| 12346 | xia |
-----------------------------
我哪里错了。 [我认为这个问题很清楚,可以理解,但 SO 不会像它所说的那样提交,添加更多细节,主要是代码。所以这个文本。]
【问题讨论】:
-
@Querty 您面临的错误是什么。
-
没有错误。只是不是你想要的 o/p,如果你看到了..
-
我不知道为什么人们如此痴迷于使用 CSV 将数据传入和传出 SQL Server。 SQL Server 至少有两种数据类型(表和 xml),设计 用于保存多个值。与字符串不同,您必须编写各种奇怪的代码来构造它们(如这里)或将它们分开以获取值。并丢失您可能有用地获得的任何数据类型检查。
标签: sql tsql sql-server-2012