2017-02-28 14 views
1

私は戻ってくる1つのセルの2行になり、SQLの行があります:私はそれらを一緒に連結しようとしています同じ列から複数の行を連結

1 H400 

2 TESTTEXT 

SELECT ATTR_VAL FROM [NDC_ATTR] where item_id = 185836 and field_id IN (144,225) 

結果私はcoluというエラーの束を取得しています、しかし

select concat (
     [NDC_ATTR], 
     ' ', 
     [NDC_ATTR] 
     ) as newColumn 
where item_id = 185836 
    and field_id in (144, 225) 

:彼らはこの「TESTTEXT [H400]」のように見えます名前は間違っています。

これは、両方のセルが同じ列から来ているためです。

私は間違っていますが、どうすれば修正できますか?

+0

あなたのテーブルにはこれらの列がないので、私はあなたのクエリとあなたがやりたいこととの関係に従っていません。 –

+2

あなたはテーブルを連結しようとしていますか...あなたの 'from'はどこですか? – SqlZim

+0

見てください:http://stackoverflow.com/a/545672/7187145 – Masoud

答えて

3
select newColumn = stuff(
    (
    select '' +[ATTR_VAL] 
    from [NDC_ATTR] 
    where item_id = 185836 
     and field_id in (144, 225) 
    order by 1 desc 
    for xml path (''), type).value('.','varchar(max)') 
    ,1,0,'') 

または複数のアイテムのため:必要に応じて

select 
    t.item_id 
    , newColumn = stuff(
    (
    select '' +[ATTR_VAL] 
    from [NDC_ATTR] as i 
    where i.item_id = t.item_id 
     and i.field_id in (144, 225) 
    order by 1 desc 
    for xml path (''), type).value('.','varchar(max)') 
    ,1,0,'') 
    from [NDC_ATTR] as t 
    where t.item_id in (...) 
    group by t.item_id 

:デリミタを追加する:(0 stuffの3番目のパラメータの区切り​​3210の長さに変更に気付く)

select 
    t.item_id 
    , newColumn = stuff(
    (
    select ';' +[ATTR_VAL] 
    from [NDC_ATTR] as i 
    where i.item_id = t.item_id 
     and i.field_id in (144, 225) 
    order by 1 desc 
    for xml path (''), type).value('.','varchar(max)') 
    ,1,1,'') 
    from [NDC_ATTR] as t 
    where t.item_id in (...) 
    group by t.item_id 
+0

ありがとう!、私はどのように注文を変更するのですか?私はH400を2位にすることはできません。 TESTTEXT [H400]はどうですか? –

+1

'for xml path'の前に' order by 1 desc'を追加できます – SqlZim

関連する問題