2013-11-23 5 views
0

У меня есть таблица, содержащая данные элемента, что ее простейшая форма состоит из номера позиции и категории. Номер позиции может быть в нескольких категориях, но не все элементы в каждой категории:Включение нескольких записей данных в одну запись

Item     category 

1111     A 
1111     B 
1111     C 
2222     A 
3333     B 
3333     C 

я должен поместить эти данные в корм для 3-го участника в виде единого номера элемента и связанных с ним категорий. Макет подачи не может быть изменен.

Так выше корма должны содержать следующие

1111,A,B,C 
2222,A 
3333,B,C 

Кто-нибудь знает, как это делает. Я закрутился в группу, свернул вверх, повернул беспорядок и мог использовать некоторую помощь.

благодарит

+0

так что вы пытаетесь сделать, вы SQL запрос для этого права –

+0

да мне нужен запрос, который будет сочетать в себе предметы. – user3024570

ответ

0

Вы должны использовать GROUP_CONCAT функцию. Это позволяет конкатенировать значения из нескольких (сгруппированных) строк при использовании инструкции GROUP BY. Подробнее here.

Хорошо, как вы используете сервер MS, я думаю, что вы будете иметь принять следующий подход Simulating group_concat MySQL function in Microsoft SQL Server 2005?

+0

К сожалению, я должен был сказать, что я использую SQl Server 2008. Я не думаю, что это предложение группы concat. – user3024570

+0

Вы проверили это? – Antoniossss

+0

Да, это не часть сервера sql – user3024570

0

Это, как вы можете принимать этот список.

SELECT item,category FROM item_category WHERE item="1111" 

Но я сомневаюсь в вашем дизайне и вашем требовании.

Листинг как это [1111, A, B, C], [2222, B] ... Вы должны манипулировать в бизнес-логики

0

Я сделал функцию, и с этим я достиг результата, который вы хотите. Надежда ниже решения для вас.

CREATE FUNCTION GetCategory 
(@Item As integer) Returns nvarchar(max) As BEGIN 
Declare @RetVal as nvarchar(max) = '' 
Declare @Category as nvarchar(40) 

DECLARE db_GetString CURSOR FOR 
SELECT MyTable.Category 
FROM MyTable 
WHERE MyTable.Item = @Item 

OPEN db_GetString  
FETCH NEXT FROM db_GetString INTO @Category 
WHILE @@FETCH_STATUS = 0  
BEGIN  
    SET @RetVal = @RetVal + ',' + @Category 
    FETCH NEXT FROM db_GetString INTO @Category 
END  

CLOSE db_GetString  
DEALLOCATE db_GetString  

Return Substring(@RetVal,2, Len(@RetVal)) END 
GO 

Select Item, dbo.GetCategory (Item) В категории от MyTable GROUP по MyTable.Item

+0

Спасибо. выглядит очень полезно, но я буду обеспокоен работой с использованием курсоров, поскольку я собираюсь развернуть большое количество данных. – user3024570

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