2016-03-16 3 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', поэтому, если вы не используете это, то, конечно, t существует. В 'ALL_TAB_COLUMNS' (и' USER_TAB_COLUMNS' вы должны использовать 'column_id' –

+0

Ах, спасибо, он также не знает CTE_COLUMNS, я полагаю. ORA-00942: таблица или представление не существует Знаете ли вы, что Я должен использовать там? –

Смежные вопросы