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

これを実行すると、1行になります。

しかし、実際にはそれは私には正しくありません。特定の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

問題は、bigintに変換taxonomy_idしておらず、それらのコンマ区切りのリストを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 に答える