2014-10-22 2 views
0

내 경우에만 this과 매우 유사한 문제를 해결 중입니다. 어떤 값도 합산하지 않습니다.
내가 그러나 this pageNull 값을 갖는 행을 생략하는 피벗 테이블

SELECT 
    id, 
    GROUP_CONCAT(if(colID = 1, value, NULL)) AS 'First Name', 
    GROUP_CONCAT(if(colID = 2, value, NULL)) AS 'Last Name', 
    GROUP_CONCAT(if(colID = 3, value, NULL)) AS 'Job Title' 
FROM tbl 
GROUP BY id; 

에서 솔루션을 사용하여 작동하는 선택을 쓸 수 있었다, 나는

+0

그래서 같은 id의 소스 행 중 * any *에'value IS NULL'이 있으면 * result *에서 행을 생략 하시겠습니까? 설명해 주시겠습니까? –

+0

@ErwinBrandstetter 네, 고마워요. – IROEGBU

답변

2

난 당신이 결과 행 소스 행 있는 경우value IS NULL을 가지고 드롭 할 가정합니다.
당신은 HAVING 절에 bit_and()와 그것을 달성 할 수 있어야한다 :

SELECT id 
    , max(CASE WHEN colID = 1 THEN value END) AS fn 
    , max(CASE WHEN colID = 2 THEN value END) AS ln 
    , max(CASE WHEN colID = 3 THEN value END) AS jt 
FROM tbl 
GROUP BY id 
HAVING bit_and(value IS NOT NULL); 

대안 :

... 
HAVING count(*) = count(value); 

나는 CASE 문에서 ELSE NULL을 주문하지 않았다 (per documentation) 때문에 :

일치하는 결과 값이 없으면 ELSE 이후의 결과가 반환됩니다. ELSE 부분이 없으면 NULL입니다.

1

가 그냥 어디 문이 제약 조건을 추가 null이 될하기 위해 value이 행을 생략 할 이 같은 쿼리의 :

SELECT 
    id, 
    GROUP_CONCAT(if(colID = 1, value, NULL)) AS 'First Name', 
    GROUP_CONCAT(if(colID = 2, value, NULL)) AS 'Last Name', 
    GROUP_CONCAT(if(colID = 3, value, NULL)) AS 'Job Title' 
FROM tbl 
WHERE value IS NOT NULL 
GROUP BY id; 

편집

몇 가지 테스트를 거친 후에 해결할 수 있지만 재미있는 이유는 무엇입니까 value is not null 작동하지 않습니다.

솔루션 링크 : http://sqlfiddle.com/#!2/b7a445/3

SELECT 
    id, 
    max(case when colID = 1 then value else '' end) AS fn, 
    max(case when colID = 2 then value else '' end) AS ln, 
    max(case when colID = 3 then value else '' end) AS jt 
FROM tbl 
where not exists (select * from tbl b where tbl.id=b.id and value is null) 
group by id 
+0

죄송합니다. 혼란을 초래했습니다. 'value'는 제약 조건을 넣으려고하는 열입니다 – IROEGBU

+0

그런 다음 where 문을'value IS NOT NULL'으로 변경하십시오 –

+0

작동하지 않습니다 ([fiddle] (http://sqlfiddle.com/#!2) 참조)./2f5692/2/0)) 나는 질의의 마지막 행을 생략하고 싶다. – IROEGBU

관련 문제