2014-03-27 2 views
1

두 테이블의 결과 집합을 하나도 만들지 않으려 고하고 있으며, 수행 방법을 알아 내거나 무엇을 검색할지 문제가 있습니다. 이 포럼에서.열을 행으로 바꾸기

Table1 
---------------------------------- 
ID | Name 
---------------------------------- 
1 | aa 
2 | bb 
3 | cc 
4 | dd 
5 | ee 


Table2 
---------------------------------- 
ID | Table1_ID | Value 
---------------------------------- 
1 | 1   | good 
2 | 2   | Dumb 
3 | 3   | Fat 
4 | 4   | Wet 
5 | 5   | High 
6 | 1   | Thin 
7 | 2   | Tall 
8 | 3   | Goofy 
9 | 4   | Rich 
10 | 5   | Funny 

나는 나에게 다음과 같은 결과 집합으로 끝낼 수있는 쿼리 나 방법을 찾고 있어요 : 코드 : 다음과 같은 가상 테이블 데이터 고려 기본적으로

aa  | bb  | cc  | dd  | ee 
--------------------------------------------------------------- 
good  | Dumb | Fat  | Wet  | High 
Thin  | Tall | Goofy | Rich | Funny 

을 나는 능력을 원하는 Table1에서 이름 목록을 가져 와서 열 머리글로 바꾸고 모든 열에 정렬 할 수있는 기능으로 Table2의 모든 값을 해당 열에 넣습니다. 이것이 가능한가?

+2

데이터를 논리적으로 배열에 저장하여이를 분류 할 수 있습니다. 시도해 봤어? –

+0

원시 SQL 쿼리 자체에서이 작업을 수행 할 수 있다고 생각하지 않습니다. 하지만 PHP 코드에서? 물론 ... 내가 할 수있는 것처럼 Cheezburger가 말했듯이, 모든 것을 배열로 옮기면 의지대로 수정할 수 있습니다. – Tularis

답변

0

물론 SQL에서이 작업을 수행 할 수 있습니다. 하지만 까다 롭습니다. 데이터는 질문에 쓰여 있으므로 t2.id 그룹을 5로 그룹화 할 수 있습니다. 그런 다음 쿼리는 조건부 집계 일뿐입니다.

select max(case when t2.table1_Id = 1 then value end) as aa, 
     max(case when t2.table1_Id = 2 then value end) as bb, 
     max(case when t2.table1_Id = 3 then value end) as cc, 
     max(case when t2.table1_Id = 4 then value end) as dd, 
     max(case when t2.table1_Id = 5 then value end) as ee 
from table2 t2 
group by cast(t2.id - 1/5 as int); 

값이 암시 적으로 자신의 id들에 의해 관련이있는 것은 정말, 정말 나쁜 데이터베이스 디자인처럼 보인다. 엔티티 ID를 조합 한 일종의 엔티티가 있어야합니다. 여기

+0

응답 해 주셔서 감사합니다. 그러나 table1 id가 동적으로 변경되었습니다 ...? – khan

+0

SQL 쿼리에는 상수 열 이름이 있습니다. 변수 이름을 원하면 동적 SQL을 사용해야합니다. –

0

가지고있어 두 가지 문제 : 켜져 있어야합니다 값 : 1) 열 이름으로 값을 사용하여 깨끗한 방법 2) 2 행에 table2.value 분할 할에서 수행 할 수 없습니다 어떤 행? Gordon Linoff는이 table2.id 필드를 사용하지만 자동 증가이고 데이터가 나중에 추가/삭제되면 해당 리듬이 깨집니다.

이전에도 비슷한 질문이있었습니다.

여기

mysql select dynamic row values as column names, another column as value

가 쿼리 문자열을 생성하고 그것의 준비된 성명을 발표 :이 하나 꽤 근접하는 답을 가지고있다.