2013-11-23 112 views
0

我有一個包含項目數據,它最簡單的形式是由項目數量和類別的表。項目數可以在多個類別,但並不是所有的項目都在每一個類別:打開多個數據記錄到一個記錄

Item     category 

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

我必須把這些數據轉化爲飼料的第三方在單個項目數量及其相關類的形式。 Feed佈局無法更改。

因此對於進料上方必須包含以下

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 

選擇項目,dbo.GetCategory(項目)作爲分類從MyTable的集團通過MyTable.Item

+0

謝謝。看起來非常有用,但我會擔心使用遊標的性能,因爲我將分叉大量數據。 – user3024570