2016-03-16 44 views
-1

我想編寫一個SQL語句(SQL Server),它在特定條件下選擇列名並「返回」由,分隔的所有列名。選擇用逗號分隔的列名稱

SELECT COLUMN_NAME 
FROM all_tab_columns 
WHERE OWNER = 'KOCH' AND TABLE_NAME = 'TABLE1'; 

這將返回列名的幾行:

NAME 
ID 
STATE 
CITY 

但我希望他們能在這個格式返回:

NAME, ID, STATE, CITY 

(我想我必須使用FROM dual)?

+4

即使你一直在重複使用的是SQL Server中,事實上,你正在使用'all_tab_columns'說說'dual'點,你實際使用的Oracle – Lamak

回答

0

對於Oracle:

;WITH CTE_Columns (column_list, column_id) AS 
(
    SELECT 
     CAST(COLUMN_NAME AS VARCHAR(500)) AS column_list, 
     COLUMN_ID 
    FROM USER_TAB_COLUMNS C 
    WHERE 
     TABLE_NAME = 'TABLE1' AND 
     COLUMN_ID= 1 
    UNION ALL 
    SELECT 
     CAST(column_list + ', ' + C.COLUMN_NAME AS VARCHAR(500)), 
     C.COLUMN_ID 
    FROM 
     CTE_Columns CL 
    INNER JOIN USER_TAB_COLUMNS C ON 
     C.TABLE_NAME = 'TABLE1' AND 
     C.COLUMN_ID = CL.COLUMN_ID + 1 
) 
SELECT column_list 
FROM CTE_Columns 
WHERE 
    COLUMN_ID = 
      (
       SELECT MAX(COLUMN_ID) 
       FROM USER_TAB_COLUMNS 
       WHERE TABLE_NAME = 'TABLE1') 
+0

不好意思啊,我正在使用Oracle和SQL Developer。 表INFORMATION_SCHEMA不存在,但我可以使用USER_TAB_COLUMNS獲取列名。 但是,當我測試它說: ORA-00904:「ORDINAL_POSITION」:無效的標識符 –

+0

'ORDINAL_POSITION'是'INFORMATION_SCHEMA.COLUMNS'表中的列,所以如果你不使用它,那當然會贏得'不存在。在'ALL_TAB_COLUMNS'(和'USER_TAB_COLUMNS'''和'USER_TAB_COLUMNS'''''應該可以使用'column_id' –

+0

啊好的謝謝,他也不知道CTE_COLUMNS,我想。 ORA-00942:表或視圖不存在 你知道嗎?我必須在那裏使用? –