2012-06-28 3 views
2

저는 pyodbc와 postgres를 사용하고 있습니다.여러 컬럼에 별명을 지정할 수 있습니까? 방법?

여러 컬럼에 별명을 지정할 수 있습니까? 여기

내 문제의 설명이다 :

데이터 구조 :

data 
id | c1 | c2 
------------- 
1 | 11 | 12 
2 | 21 | 22 

표기 : C 열위한

dictionary 
id | key | value 
---------------- 
1 | k1 | v11 
1 | k2 | v12 
2 | k1 | v21 
2 | k2 | v22 

표기법 K는 키이며, V 값

위한

k1과 k2를 두 개의 다른 열로 생각할 수 있습니다. 데이터 구조는 끊임없이 변하기 때문에 이런 방식입니다. 나는 그것을 디자인하지 않았다. 나는 그걸로 가야한다.

나는 (일부 이름으로 가장 중요한 것은, 일부 행에 대해, 내가 접근 할 수 K1 및 K2 열) 나에게 다음과 같은 것을 제공하는 SQL 쿼리를 알아낼 수 없습니다 :

data 
id | c1 | c2 | k1 | k2 
------------------------- 
1 | 11 | 12 | v11 | v12 
2 | 21 | 22 | v21 | v22 

문제 I을 계속 테이블에 별칭을 지정하면 SQL 결과에 사전 테이블의 두 개의 "키"열이 포함되어 두 열에 액세스 할 수있는 열을 제어 할 수 없지만 행에 별칭을 지정할 수 있습니다. SQL 문 내에서 참조되는 테이블을 제어하지 않습니다.

내가 생각하고 수정 프로그램은 두 개의 열 별칭을하는 것입니다

SELECT * FROM data 
FULL JOIN dictionary AS a1,a2,a3 
ON data.id = a1 
FULL JOIN dictionary AS a4,a5,a6 
ON data.id = a4 
WHERE a2 = k1 and a5 = k2 

표기법 : A는 이것의 결과는 이론적으로 모든

data 
id | c1 | c2 | a3 | a6 
------------------------- 
1 | 11 | 12 | v11 | v12 
2 | 21 | 22 | v21 | v22 

주 같을 것이다 별명

입니다 a는 기술적으로 여기에있을 것이지만 3과 6은 제가 관심있는 사람입니다

+0

새로운 구문을 만들었습니까 아니면 사용하지 않은 별칭 구문입니까? –

+0

여기 키워드가 "롤업"이라고 생각합니다. 결과 집합의 * 모양 * (즉, 열)이 시나리오에서 변경됩니다. 일반적으로 SQL은 좋지 않습니다. * 동적 인 (또는 일회용) 쿼리는'k0 ... kN' 열을 얻습니다. –

+0

예, 원하는 동작을 설명하기 위해 구문을 구성하고있었습니다 (어떤 열 나는 접근 할 필요가 있었다). Andomar의 대답은 올바른 구문을 보여줍니다. –

답변

2

You 예를 들어 dictionary as d1과 같이 전체 테이블의 별칭을 지정할 수 있습니다. 그런 다음 표의 열 이름을 d1.col1으로 참조하십시오. 예를 들면 다음과 같습니다.

SELECT d.id 
,  d.c1 
,  d.c2 
,  d1.value as a3 
,  d2.value as a6 
FROM data as d 
LEFT JOIN 
     dictionary as d1 
ON  data.id = d1.id 
     and d1.key = 'k1' 
LEFT JOIN 
     dictionary as d2 
ON  data.id = d2.id 
     and d2.key = 'k2' 
+0

그건 내가 언급 한 두 가지 문제 중 하나를 일으킬 것입니다. 그렇지 않습니까? 결과 테이블에는 반복되는 열 이름이 포함됩니다. –

+0

열을 선택하고 대답에서 편집 한 후 별칭을 지정할 수 있습니다. 일종의 놀랍게도 '전체 조인'을 쓸 수 있지만 별칭 열은 쓸 수 없습니다. hehe :) – Andomar

+0

아, 알겠습니다. 감사! 이 작품 희망! 방금 여러 별칭을 지정하는 방법을 알지 못했습니다. SELECT *, d1.value를 a3, d2.value를 a6 ...으로 할 수 있습니까? 실제 데이터는 많은 열이 있기 때문에 ... sql의 유효한 구문에 대한 문서는 어디에 있습니까? 이것은 옳았던 것처럼 보이지만 확인을 위해 문서와 대조하고 싶습니다. –