database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 9415 게시물 읽기
No. 9415
select (select '컬럼') from 테이블; 컬럼을 테이블 컬럼인식방법 아시는분?
작성자
김현진(tokssonda)
작성일
2014-03-06 14:30
조회수
11,291

select (select '컬럼') from 테이블;

 

table name : table

column : a, b

value : 1, 2

 

select (select 'a'), b from table;

 

결과

 

?column? | b

a | 2

 

원하는 결과

 

a | b

1 | 2

 

아시는분 ~ *

이 글에 대한 댓글이 총 5건 있습니다.

 psql 에서 그냥 그렇게 보고 싶은 것이라면, 

\x 

명령을 실행하고 쿼리를 보내면 결과를 그렇게 보여주고요, 

 

응용프로그램에서 저렇게 쓰기 위해서 쿼리를 만들어야 한다면, 

각 칼럼 기준으로 독립된 쿼리를 만들고, 

그것을 union all 로 묶어줍니다. 

postgres=# select * from t;
 a | b
---+---
 1 | 2
 3 | 4
 5 | 6
(3 rows)

postgres=# \x
Expanded display is on.
postgres=# select * from t;
-[ RECORD 1 ]
a | 1
b | 2
-[ RECORD 2 ]
a | 3
b | 4
-[ RECORD 3 ]
a | 5
b | 6

postgres=# \x
Expanded display is off.
postgres=# select 'a' as column_name,a as value ,row_number() over (), 1 as column_order from t ;
 column_name | value | row_number | column_order
-------------+-------+------------+--------------
 a           |     1 |          1 |            1
 a           |     3 |          2 |            1
 a           |     5 |          3 |            1
(3 rows)

postgres=# select 'b' as column_name,b as value ,row_number() over (), 2 as column_order from t ;
 column_name | value | row_number | column_order
-------------+-------+------------+--------------
 b           |     2 |          1 |            2
 b           |     4 |          2 |            2
 b           |     6 |          3 |            2
(3 rows)

postgres=# 
select 'b' as column_name,b as value,row_number() over (), 2 as column_order from t
union all 
select 'a' as column_name,a as value,row_number() over (), 1 as column_order from t
order by row_number,column_order;
 column_name | value | row_number | column_order
-------------+-------+------------+--------------
 a           |     1 |          1 |            1
 b           |     2 |          1 |            2
 a           |     3 |          2 |            1
 b           |     4 |          2 |            2
 a           |     5 |          3 |            1
 b           |     6 |          3 |            2
(6 rows)
김상기(ioseph)님이 2014-03-11 10:15에 작성한 댓글입니다.
이 댓글은 2014-03-11 10:17에 마지막으로 수정되었습니다.

깔깔 상기님 안녕하세요 -ㅂ- 제가 글을 개떡같이 써서 ;;;

다른 답변이 왔네요 ㅋㅋㅋ

 

포인트는 select (select 'a') <-- 요부분이 a문자열이 아닌 컬럼으로

인식되게 할수 있는 방법을 모색하고 있습니다 ^ ^ ㅎㅎㅎ

알고계시면 답변 부탁드려요 ^ ^

김현진(tokssonda)님이 2014-04-02 17:50에 작성한 댓글입니다.

ㅋㅋㅋ 하려는 이유는 select (select 'a') 값이 실제로는

 

table2

column : k

value : a

 

select (select k from table2) 을 하려고 보니 문자열로 나온 a가

컬럼으로 인식하지 못해서 컬럼을 서브쿼리처럼 받아서 쓸수 있나해서

ㅋㅋㅋㅋ

김현진(tokssonda)님이 2014-04-02 18:01에 작성한 댓글입니다.

원하는 작업은 단일 sql 구문으로는 불가능합니다.

왜냐하면, select 다음 오는 column 세트는 쿼리 실행전에 이미 결정이 나야하거든요.

 

select (select k from table2) from table1;

형태라면,

그런 부분은 응용 프로그램에서 원하는 칼럼 이름을 뽑는 쿼리와,

그 쿼리의 결과 값을 가지고, 다시 만든 쿼리로 나눠야 하겠죠.

 

DB 서버 측에서 한 번의 쿼리로 처리 하려면, 사용자 정의 함수를 사용해서

그 안에서 위와 같은 작업을 하는 형태로 만들어야 할 것 같네요.

이를 프로시져 안에서의 동적 쿼리라고 합니다.

 

이렇게 하지 않고, 어떻게든 하나의 쿼리를 사용해야한다면,

case 구문으로 경우의 수를 모두 나열 해야합니다.

 

select case when (select k from table2) = 'a' then a

when (select k from table2) = 'b' then b

when (select k from table2) = 'c' then c

....

end as dyncol from table1;

 

이렇게 되어야 할 것 같은데,

이 부분도, case when 구문의 특수성 때문에, table1 의 a, b, c 칼럼의 자료형이 같아야 정상 작동을 합니다.

 

----

재미난 질문이었네요.

 

김상기(ioseph)님이 2014-04-03 10:37에 작성한 댓글입니다.

ㅋㅋㅋ 그렇군요. 상기님 답변 감사드립니다.

혹시나 했는데 안되는군요 ^ ^

언제나 명쾌한 답변 감사드려요 - *

김현진(tokssonda)님이 2014-04-09 09:59에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
9419index를 어떻게 해야할지요.. [1]
JungHo Kim
2014-03-13
10657
9418encoding 과 관련된 pg_stat_activity 관련 질문입니다. [2]
김민석
2014-03-12
10463
9416필드 수와 내용부분 칼럼의 분리 [2]
S.K.
2014-03-10
10536
9415select (select '컬럼') from 테이블; 컬럼을 테이블 컬럼인식방법 아시는분? [5]
김현진
2014-03-06
11291
9414디비 속도좀 봐주세요. [4]
iyob
2014-03-05
10936
9406AIX에서 발생되는 에러 [4]
김대청
2014-02-10
14052
9404프로시저에서 .vbs 실행 가능한가요? [1]
한혜진
2014-01-28
10667
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.033초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다