2016-10-11 2 views
0

2 개 테이블을 결합하고 작동하지만 두 번째 테이블을 잘못 설계 한 것 같습니다. 실제로 객관식 질문의 각 항목에 대한 열이 있습니다. 그 결과는 다음과 같이 올열 머리글을 행 요소로 변환

select Count(n.ID) as MemCount, u.Pay1Click, u.PayMailCC, u.PayMailCheck, u.PayPhoneACH, u.PayPhoneCC, u.PayWuFoo 
from name as n inner join 
UD_Demo_ORG as u on n.ID = u.ID 
where n.MEMBER_TYPE like 'ORG_%' and n.CATEGORY not like '%_2' and 
(u.Pay1Click = '1' or u.PayMailCC = '1' or u.PayMailCheck = '1' or u.PayPhoneACH = '1' or u.PayPhoneCC = '1' or u.PayWuFoo = '1') 
group by u.Pay1Click, u.PayMailCC, u.PayMailCheck, u.PayPhoneACH, u.PayPhoneCC, u.PayWuFoo 

: 쿼리는 이것이다

Count Pay1Click PayMailCC PayMailCheck PayPhoneACH PayPhoneCC PayWuFoo 
8  0   0   0    0    0   1 
25  0   0   0    0    1   0 
8  0   0   0    1    0   0 
99  0   0   1    0    0   0 
11  0   1   0    0    0   0 

그래서 문제는, 내가 2 열이를 얻을 수있는 방법, 카운트하고 다음 6 개 헤더의 다음 헤더 결과는 다음과 같습니다.

Count PaymentType 
8  PayWuFoo   
25  PayPhoneCC   
8  PayPhoneACH   
99  PayMailCheck   
11  PayMailCC   

감사합니다.

+1

어떤 DBMS를 사용하고 있습니까? 이 진술을 쓰는 것에 싫증이났다 :/ –

+0

미안하지만, 내 잘못. SQL Server 2012 – Jayson

답변

0

"사실 테이블과 차원 테이블 사이의 차이는"이 일

시도
Select Count, 

CASE WHEN Pay1Click=1 THEN 'Pay1Click' 
      PayMailCC=1 THEN ' PayMailCC' 
      PayMailCheck=1 THEN 'PayMailCheck' 
      PayPhoneACH=1 THEN 'PayPhoneACH' 
      PayPhoneCC=1 THEN 'PayPhoneCC' 
      PayWuFoo=1 THEN 'PayWuFoo' 
    END as PaymentType 

FROM ...... 
+0

이 방법이 효과적입니다. 사례 진술을하는 것을 완전히 잊었습니다. 감사. – Jayson

0

실제로 두 번째 테이블의 구조를 잘못 생각한 것 같습니다. 각 객관식 질문에 대한 행을 만드는 대신 모든 열을 '응답'열로 변환하는 것이 좋습니다. 따라서 해당 열의 레코드로 대체 이름을 사용하게됩니다.

그러나이 경우 테이블 구조를 변경하고 테이블 채우기 방식을 변경해야합니다. 당신은 대안의 이름을 확인하고 그것을 당신의 식탁에 넣어야합니다.

이 외에도 반복적 인 데이터를 신경 쓸 수 있으므로 동일한 문자열을 반복 작성하면 테이블이 커질 수 있습니다. 답을 암시 다른 것들의 UD_Demo_ORG 테이블에 다른 정보가있는 경우 , 당신이이 같은

ID PaymentType OtherInfo(description, etc)... 
1  PayWuFoo   ... 
2  PayPhoneCC  ... 
3  PayPhoneACH  ... 
4  PayMailCheck  ... 
5  PayMailCC  ... 

로 대체 ID를 제공,이 같은 payment_dimension 테이블이나 뭔가를 만들어 테이블을 정상화 할 수 있습니다 차원 테이블을 호출 한 다음 레코드에 필요하지 않은 정보가 아닌 지불 유형의 ID를 갖게됩니다. 그래서 대신 큰 결과 세트의, 어쩌면 당신은 많은 쿼리에 의해 단순화하고 결과 세트로 단지

Count PaymentId 
8  1   
25  2   
8  3   
99  4   
11  5 

있을 수 있습니다. 쿼리가 빨라지므로 다른 정보가 필요하면 테이블에 가입하여 가져올 수 있습니다.

하지만 이름이 유일한 필드 인 경우이 경우에는 "id"로 결제 유형을 사용할 수 있습니다. 단지 고려하십시오. 차원 테이블로 분리하면 확장 가능합니다.

추가 읽기에 대한 몇 가지 참조 :

  1. http://beginnersbook.com/2015/05/normalization-in-dbms/ "DBMS의 정규화는"

  2. http://searchdatamanagement.techtarget.com/answer/What-are-the-differences-between-fact-tables-and-dimension-tables-in-star-schemas

관련 문제