2017-02-28 27 views
1

多行我也行的SQL導致2排1個單元回來:串聯來自同一列

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

結果:

1 H400 

2 TESTTEXT 

我想一起將它們連接起來,從而他們看起來像這樣'TESTTEXT [H400]':

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

但是,我收到了一堆錯誤說colu名字是錯誤的。

我認爲這是因爲兩個單元格都來自同一列。

我在做什麼錯,我該如何解決?

+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改變到定界符​​3210的長度爲stuff的第三參數)

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成爲第二名。 TESTTEXT [H400]怎麼樣? –

+1

你可以在'for xml path'之前添加'order by 1 desc' – SqlZim