2015-09-11 92 views
0

一些建議對這個問題:撰寫動態SELECT語句

select 
    concat(MySourceTable,',',sid,'X',gid,'X',qid) as MySourceFieldname 
from 
    MySchemaTable 
where 
    SomeCriteria; 

使用上聲明,我收到了名單(只有一列)字段名的。 我怎樣才能變換這在水平(字段彼此相鄰)的位置,由逗號分隔 顯示欲產生「正常」 SELECT-聲明以供進一步使用

@amixdon 輸入是:

select concat('shape_survey_990113',sid,'X',gid,'X',qid) as lsfield -- <=MySourceFieldname 
from shape_questions -- <=MySchemaTable i.e. kind of dictionary 
where question='result' -- <=SomeCriteria 
    and sid=990113 
    and language='en' 
    order by lsfield; 

結果輸入的看起來像這樣(例如)

lsfields 
--------- 
shape_survey_990113.990113X468X729, 
shape_survey_990113.990113X469X733, 
shape_survey_990113.990113X470X737, 
...., 

說明:SID,GID,QID是從一個表,相當於一個字典採取數字內容這是源SYST我想從中選擇信息(不能更改)。這是一個開源調查工具。在這個表格中,每個調查的所有信息都被處理(數字值990113表示一個特殊的調查,上面的concat是包含問題答案的最終字段名稱) 'shape_survey_990113'是用於選擇firlds來自:

這一選擇的結果應該是這樣的一個可以寫入

shape_survey_990113.990113X235X476, shape_survey_990113.990113X235X484, shape_survey_990113.990113X235X496 

..to在接下來的步驟中使用,使一些變量 (如SET @MyFields = ...)提出一個真實的選擇陳述,如:

concat('SELECT ', @MyFields, ' FROM shape_survey_991103;') 

可惜我不能上傳截圖堡壘這一點,沒有足夠的聲譽....

+1

可以顯示示例數據和預期結果嗎? – Jens

+0

只是使用group_concat圍繞你已經有的 – amdixon

+0

請也張貼一些示例輸入和期望的輸出 – amdixon

回答

0

沒有什麼神聖的,相當多的褻瀆,有關CONCAT()。失去它。並失去引用的逗號。像這樣。

select 
    MySourceTable, sid, gid, qid 
from 
    MySchemaTable 
where 
    SomeCriteria; 

儘可能簡單。

+0

我不認爲這是什麼操作要求。最後一句是:...想要產生一個'正常的'選擇語句以供進一步使用.. – amdixon

+0

@amdixon隨時編輯「我的」答案 - 這是社區wiki,因此它是「我們的」答案。 –

+0

將在用戶澄清期望的輸入+輸出時執行 – amdixon