-2

嘿,我正在使用以下查询来显示以逗号分隔的问题列表。

SELECT tt.VrNo, STUFF((select ','+ Er1.ErrorDesc 
from ( select * from CallRegErrors )as Main 
left join ErrorMaster ER1 on Main.ErrorCode=ER1.ErrorCode
WHERE (main.VrNo = tt.VrNo)
FOR XML PATH('')) ,1,1,'') AS Problemlist

查询给出的输出如 a、b、c、d 等

但我的实际要求是我想在新行中显示每个错误描述,例如
a
b
c
d

我尝试了以下查询:

SELECT tt.VrNo, STUFF((select char(13)+char(10)+ Er1.ErrorDesc
from ( select * from CallRegErrors )as Main 
left join ErrorMaster ER1 on Main.ErrorCode=ER1.ErrorCode
WHERE (main.VrNo = tt.VrNo)
FOR XML PATH('')) ,1,1,'') AS Problemlist

我也用过

SELECT tt.VrNo,Replace(STUFF((select ','+ Er1.ErrorDesc as [text()] from (select * from CallRegErrors)as Main left join ErrorMaster ER1 on Main.ErrorCode=ER1.ErrorCode WHERE (main.VrNo = tt.VrNo) FOR XML PATH('')),1,1,''),',',char(13)+char(10)) AS Problemlist from (select main.VrNo, Er1.ErrorDesc from ( select * from CallRegErrors ) as Main left join ErrorMaster ER1 on Main.ErrorCode=ER1.ErrorCode ) as tt group by tt.VrNo 但现在使用上述查询后得到由空格而不是逗号分隔的问题列表

但它没有给出我想要的输出。

请帮忙..

提前致谢

4

1 回答 1

3

我认为我们需要更多信息才能为您提供帮助。

我认为您正在尝试将父子关系中子级的信息格式化为列表。您可能在网络上看到过类似此博客的内容。

但是,您的查询格式不正确。

ErrorMaster (Production.ProductCategory) 是父级,CallRegErrors (SUB.ProductCategoryID) 是子级吗?

如果是这样,只需将查询更改为那些表名字段名称即可。

我在整体结果上使用了 REPLACE 函数将 COMMAS 更改为 CR + LF。

-- Sample database
USE AdventureWorks2012
GO

-- Change SQL from www.sqlandme.com for this users problem
SELECT      
    CAT.Name AS [Category],
    REPLACE(STUFF((
        SELECT ',' + SUB.Name AS [text()]                        
        FROM Production.ProductSubcategory SUB
        WHERE SUB.ProductCategoryID = CAT.ProductCategoryID
        FOR XML PATH('') 
        ), 1, 1, '' ), ',', CHAR(13) + CHAR(10))
    AS [Sub Categories]
FROM  Production.ProductCategory CAT

只有在 SSMS 中类型设置为 TEXT 时,才能在输出窗口中看到回车。

我希望这能解决你的问题。如果没有,请回信提供更多信息!!

在此处输入图像描述

于 2013-09-05T12:50:30.693 回答