2013-07-04 48 views
1

我有一個名爲虛擬表,如下圖所示:Concating行的SQL

No. Name 
1  ABC 
2  NMD 
2  SDSDS 
1  23ererer 

現在我想給定號碼

對於離於Concat的所有Name列。說號是1我想要ABC23ererer作爲我的輸出

這是在不使用PL-SQL的情況下在ORACLE(SQL)中完成的。

這怎麼辦?

+0

你想Concat的名稱列的所有名稱相同數量? – kevinm

+0

也許http://stackoverflow.com/questions/1120706/is-there-an-oracle-sql-query-that-aggregates-multiple-rows-into-one-row可以給一些提示。 – OcuS

+0

你正在使用哪個版本? –

回答

1

這可能幫助...

select NO, 
    listagg(NAME, ',') within group (order by NAME) as name 
from TableName 
group by NO 

否則檢查this

-4

試試這個:

 
SELECT Number+' '+ 
Name FROM table_name 

+0

你看他給的例子嗎? – Barmar

+0

這不是有效的SQL(既不是在Oracle中,也不是在標準SQL中) –

1

LISTAGG不Oracle10g的支持。如果你有10g我認爲下面的查詢會幫助你。

select No, rtrim(Name,',') Name 
     from (select No 
     , Name, rn 
     from yourtable 
       model 
         partition by (No) 
         dimension by (row_number() over 
            (partition by No order by Name) rn 
            ) 
         measures  (cast(Name as varchar2(40)) Name) 
         rules 
         (Name[any] order by rn desc = Name[cv()]||''||Name[cv()+1] 
         ) 
      ) 
     where rn = 1 
     order by NO 

看到您demo in sql fiddle

+0

自9i [你可以問這個問題'tom'stragg'(http://asktom.oracle.com/pls/apex/f?p=100:11:0) :::: P11_QUESTION_ID:15637744429336) – haki

0
SELECT "No.", LISTAGG(Name, ',') WITHIN GROUP (ORDER BY "No.") AS Name 
FROM TableName 
GROUP BY "No.";