0

我有以下 sql 查询(这是获取逗号分隔表的转置查询)

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

但我得到Error converting data type varchar to bigint. 这张桌子taxonomy_idbigint

有任何想法吗?

更新:

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个小时。如果有人可以帮助我,我将非常感激......

谢谢

4

2 回答 2

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
于 2011-12-12T14:17:57.113 回答
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
于 2011-12-12T14:30:16.147 回答