2013-09-05 2 views
-2

Привет, Я использую следующий запрос для отображения списка проблем, разделенных запятыми.возврат каретки в sql-сервере 2012

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 

запрос дает выход как а, Ь, с, 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 

, а также я использовал

ВЫБРАТЬ tt.VrNo, Replace (STUFF ((выберите '' + Er1.ErrorDesc, как [текст()] из (выберите * из CallRegErrors) в Main налево присоединиться к ErrorMaster ER1 на Main.ErrorCode = ER1.ErrorCode WHERE (main.VrNo = tt.VrNo) FOR XML PATH ('')), 1,1, ''), ',', char (13) + char (10)) AS Problemlist from (выберите main.VrNo, Er1.ErrorDesc из (выберите * из CallRegErrors) в качестве основного левого соединения ErrorMaster ER1 на Main.ErrorCode = ER1.ErrorCode) как tt группой по tt.VrNo , но теперь получите список проблем, разделенных пробелами вместо запятых, после использования вышеуказанного запроса

но его не дает выход, который я хочу.

пожалуйста, помогите ..

Заранее спасибо

+2

Можете выложить на "Не работает"? – bendataclear

+1

SSMS не покажет ваши возвраты каретки ... – gvee

+0

Хм .. если вам нужны они в отдельных строках, зачем их конкатенировать? Почему бы вам просто не выбрать напрямую? –

ответ

3

Я думаю, что нам нужно больше информации, прежде чем мы можем вам помочь.

Я думаю, что вы пытаетесь отформатировать информацию на дочернем уровне в родительском дочернем отношении в списке. Вероятно, вы видели что-то вроде этого blog в Интернете.

Однако ваш запрос неверно отформатирован.

Является ли 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 

Вы можете видеть только возврат каретки в окне вывода, когда тип установлен в TEXT в SSMS.

Я надеюсь, что это решает вашу проблему. Если нет, напишите, пожалуйста, с дополнительной информацией!

enter image description here

Смежные вопросы