2012-03-18 1 views
3

의 값으로 열 이름 : 나는 초래하는이에서 쿼리를 생성 할 수있는 방법을SQL SELECT 문, 나는 다음과 같은 테이블이있는 데이터베이스에 일하고 있어요 다른 테이블

id location 
1 Singapore 
2 Vancouver 
3 Egypt 
4 Tibet 
5 Crete 
6 Monaco 

내 질문입니다, 하여 쿼리로 작성하지 않고 다음과 같은 열 이름 :

쿼리 결과 :

Singapore , Vancouver, Egypt, Tibet, ... 
<     values    > 
+2

에서 명령이 불가능하고, 이럴 그것은 당신이 표시이기도 스크립트 잘못된 방식으로 뭔가를하려합니다. 네 진짜 문제가 뭐니? – Jon

+0

내 쿼리의 출력에서 ​​다른 테이블의 각 위치에 대한 참조 수를 계산해야합니다. 열 이름은 위치 이름으로 향해야합니다. – user1277546

+0

다른 데이터베이스를 쿼리하고 싶습니까? 그렇다면이 데이터베이스와 관련이있는 것은 무엇입니까? – Jon

답변

0

당신은 정말 장난 동적 SQL이 할 수도 있지만 나는 그것을 추천하지 않을 것입니다.

그러나 아래와 같이 생성 할 수 있습니다. 그 구조가 수용 가능한지 알려 주시면 일부 SQL을 게시 할 예정입니다.

Location | Count 
---------+------ 
Singapore| 1 
Vancouver| 0 
Egypt | 2 
Tibet | 1 
Crete | 3 
Monaco | 0 
+0

불행히도, 위치 이름을 제목으로 생성하고 값을 각각의 개수로 생성하는 무언가가 필요합니다. – user1277546

3

은 내가 어떻게 쿼리로 작성하지 않고 다음과 같이 열 이름 초래 쿼리를 생성 할 수 있습니다 :

에도 crosstab() (에서 tablefunc extension)과를, 당신을 열 이름을 써야합니다.

쿼리에 전용 C 함수를 만드는 경우를 제외하고는 예외입니다. tablefunc 확장은이 프레임 워크를 제공하지만 출력 열 (국가 목록)은 안정적이어야합니다. 나는 며칠 전에 비슷한 사건에 대해 "튜토리얼"을 쓴 :

SELECT sum(CASE WHEN t.id = 1 THEN o.ct END) AS "Singapore" 
    , sum(CASE WHEN t.id = 2 THEN o.ct END) AS "Vancouver" 
    , sum(CASE WHEN t.id = 3 THEN o.ct END) AS "Egypt" 
     -- more? 
FROM tbl t 
JOIN (
    SELECT id, count(*) AS ct 
    FROM other_tbl 
    GROUP BY id 
    ) o USING (id); 

ELSE NULL은 다음과 같습니다

대안이 같은 CASE 문을 사용하는 것입니다 CASE 표현식에서는 선택 사항입니다. The manual:

ELSE 절을 생략하고 참 조건이없는 경우 결과는 null입니다. 두 가지 기술에 대한

기본 사항 :

0

SelectTopNRows가 SSMS

drop table #yourtable; 

create table #yourtable(id int, location varchar(25)); 

insert into #yourtable values 
('1','Singapore'), 
('2','Vancouver'), 
('3','Egypt'), 
('4','Tibet'), 
('5','Crete'), 
('6','Monaco'); 


drop table #temp; 

create table #temp(col1 int); 

Declare @Script as Varchar(8000); 

Declare @Script_prepare as Varchar(8000); 

Set @Script_prepare = 'Alter table #temp Add [?] varchar(100);' 
Set @Script = '' 

Select 
    @Script = @Script + Replace(@Script_prepare, '?', [location]) 
From 
    #yourtable 
Where 
    [id] is not null 

Exec (@Script); 
ALTER TABLE #temp DROP COLUMN col1 ; 

select * from #temp; 
+0

이것은 정확히 당신이 찾고있는 것을 할 것입니다. –

+0

이것은 Postgres에서 작동하지 않습니다. –

관련 문제