【发布时间】:2015-01-30 15:46:18
【问题描述】:
我对以下查询结果有疑问。我想将每个客户的 product_number 连接在它自己的列中,只为每个客户显示一行。客户列是一个 varchar。我尝试使用 STUFF 和 FOR XML Path,但没有得到我想要的结果。
它在 PRODUCTS 列中为我提供了每个产品编号,因此我不是获取每个公司的产品,而是获取整个列表或每个产品行。
SELECT customer_number
,first_name_initial
,last_name
,billing_address_line_1
,billing_city
,zip_code
,phone_number1
,email1
,STUFF((SELECT ', ' + product_number
FROM #TempS
FOR XML PATH ('')), 1, 1, '') [PRODUCTS]
FROM #TempS
GROUP BY customer_number
,first_name_initial
,last_name
,billing_address_line_1
,billing_city
,zip_code
,phone_number1
,email1
ORDER BY customer_number
我希望每行的每个公司都如下所示(为了便于阅读,我缩短了)。
提前致谢。
ROWID customer company address city zip_code phone_number email1 PRODUCTS
1 1255400 Company1 CAdd1 City1 10001 111-111-1111 e@c.com 01002, 09999, 09002 091111, 00005
"
这成功了。
SELECT customer_number,
first_name_initial,
last_name,
billing_address_line_1,
billing_city,
zip_code,
phone_number1,
email1,
Stuff((SELECT ',' + CONVERT(VARCHAR(5), product_number)
FROM #tempsales t2
WHERE t1.customer_number = t2.customer_number
AND t2.product_number > ''
FOR xml path('')), 1, 1, '') [Products]
FROM #tempsales t1
GROUP BY customer_number,
first_name_initial,
last_name,
billing_address_line_1,
billing_city,
zip_code,
phone_number1,
email1,
ORDER BY customer_number
谢谢。
【问题讨论】:
-
选择中缺少条件,这就是为什么您要获得所有产品,试试这个: STUFF((SELECT ', ' + product_number FROM #TempS WHERE fk_customer_number = customer_number FOR XML PATH ('' )), 1, 1, '') [产品]
-
#TempS 是临时表,所以没有 fk(我认为这是准确的)。
标签: sql sql-server concatenation rows for-xml-path