2011-12-12 97 views
0

我有以下SQL查詢(這是一個轉置查詢來獲取逗號分隔的表)置查詢VARCHAR BIGINT轉換

SELECT CAST ((SELECT taxonomy_id + ',' 
        FROM content 
        FOR XML PATH('')) AS bigint) AS NewTaxonomytableName 

但我正在逐漸Error converting data type varchar to bigint.taxonomy_idbigint

任何想法?

UPDATE:

SELECT CAST ((SELECT CAST(taxonomy_id AS varchar) + ',' AS Expr1 FROM taxonomy_item_tbl FOR XML PATH('')) AS varchar) AS Expr1 

運行這給了我一個行。

但事實上它並不適合我。它只需要逗號分隔特定content_id的taxonomy_id。

一個例子:

content_id taxonomy_id 
1   15 
1   16 
5   24 
5   19 

需求是:

content_id taxonomy_id 
1   15,16 
5   24,19 

我真的堅持這個8小時。如果有人可以幫助我,我會很感激......

感謝

+1

你鑄造逗號分隔的列表來BIGINT。但是'1,2,3,4'不能被轉換成BIGINT ... CAST到NVARCHAR(max)或者什麼?或者根本不打算呢? – MatBailie

回答

1

的問題是,你是不是轉換taxonomy_id爲一個BIGINT,你將一個逗號分隔它們的名單爲一個BIGINT 。

試試這個:

SELECT CAST ((SELECT CAST(taxonomy_id as varchar) + ',' 
       FROM content 
       FOR XML PATH('')) AS varchar(max)) AS NewTaxonomytableName 

編輯 好吧,因爲我不能完全肯定你的表結構,則可能需要玩這個得到你想要什麼,但理論是正確的。

SELECT DISTINCT c.content_id, 
    CAST((SELECT CAST(taxonomy_id as varchar) + ',' 
      FROM content 
      WHERE content_id = c.content_id 
      FOR XML PATH('')) AS varchar(max)) AS taxonomy_ids 
FROM content c 
+0

嗨,試過這個,仍然得到相同的錯誤。怎麼來的? – Ozkan

+0

立即嘗試 - 我認爲你會得到一個稍微不同的錯誤:'錯誤轉換數據類型bigint爲varchar.'相對於'錯誤轉換數據類型varchar到bigint.' –

+0

確實,這解決了它。但它不會返回任何內容:s – Ozkan

1
declare @T table 
(
    content_id int, 
    taxonomy_id int 
) 

insert into @T values 
(1,   15), 
(1,   16), 
(5,   24), 
(5,   19) 


select T1.content_id, 
     stuff((select ','+cast(T2.taxonomy_id as varchar(20)) 
       from @T as T2  
       where T1.content_id = T2.content_id 
       for xml path(''), type).value('.', 'varchar(max)'), 1, 1, '') as taxeconomy_id 
from @T as T1 
group by T1.content_id 

結果:

content_id taxeconomy_id 
----------- ------------- 
1   15,16 
5   24,19 
相關問題