0
나는 대답을 Mysql query to dynamically convert rows to columns에 보았지만 모든 정보를 얻기 위해 테이블을 조인해야하기 때문에 작동하지 못했습니다. 여기에 나와있는 것처럼 '질문'을 열 이름으로 사용할 수있게 도와 주시겠습니까?데이터를 쿼리하는 동안 행을 열로 동적으로 변환하는 쿼리
SELECT T.id, T.datestamp, SQ.question,
IF(type IN ("K", "N", "S", "T", "Y", "*") AND type NOT IN ("F"),
T.value,
IF(parent_qid = 0, SA.answer, SA2.answer)
) as answer
FROM survey_questions SQ
JOIN survey_lookup SL ON SL.qid = SQ.qid
JOIN tmp T ON T.survey_col = SL.survey_col
LEFT JOIN survey_answers SA ON SA.qid = SQ.qid
AND SA.code = T.value
AND SA.language = 'en'
LEFT JOIN survey_answers SA2 on SA2.qid = SQ.parent_qid
AND SA2.code = T.value
AND SA2.language = 'en'
WHERE SQ.language = 'en'
;
제공 :
id datestamp question answer
----------------------------------------------------------------
1 2/16/2017 11:55 Pay Somewhat
1 2/16/2017 11:55 Benefits (health plan, leave, etc.) Slightly
1 2/16/2017 11:55 Career Advancement Slightly
1 2/16/2017 11:55 Access to Training Somewhat
1 2/16/2017 11:55 Leadership Style Very
1 2/16/2017 11:55 Manager/Supervisor Style Somewhat
1 2/16/2017 11:55 Please enter comments The company's policies...
이 코드는 때 모든 일이 코드를 사용하고
id datestamp survey_col value
-----------------------------------------------
1 2/16/2017 11:55 885457X234X1368SQ001 A3
1 2/16/2017 11:55 885457X234X1368SQ002 A4
1 2/16/2017 11:55 885457X234X1368SQ003 A4
1 2/16/2017 11:55 885457X234X1368SQ004 A3
1 2/16/2017 11:55 885457X234X1368SQ005 A2
1 2/16/2017 11:55 885457X234X1368SQ006 A3
1 2/16/2017 11:55 885457X234X1368SQ007 A4
1 2/16/2017 11:55 885457X234X1368SQ008 A3
1 2/16/2017 11:55 885457X234X1368SQ009 A4
1 2/16/2017 11:55 885457X234X1368SQ010 A1
: 같은
datestamp pay benefits ... career advancement
---------------------------------------------------------------------
2/16/2017 11:55 Somewhat Slightyly Slightly
2/16/2017 11:55 Agree Somewhat Very
는 데이터 보인다 데이터가 한 테이블에 있었고 se 조인.
SET @sql = NULL;
SET SESSION GROUP_CONCAT_MAX_LEN = 1000000; -- default is 1024
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(question = ''', REPLACE(question,"'", "\\'"), ''', answer, NULL)) AS ''', REPLACE(question,"'", "\\'"), ''''
)
) INTO @sql
FROM tmp;
SET @sql = CONCAT('SELECT row_id, submitdate, ', @sql, ' FROM ', survey_report, ' GROUP BY row_id');
IF DEBUG = 1 THEN
SELECT @sql;
END IF;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
이것은 REPLACE 기능이없는 시도였습니다 (사용하고 싶습니다).
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(SQ.question = ', '''SQ.question''','
IF(type IN ("K", "N", "S", "T", "Y", "*") AND type NOT IN ("F"),
T.value,
IF(parent_qid = 0, SA.answer, SA2.answer)
) as answer, NULL)) as answer', '''SQ.question''')
) INTO @sql
FROM survey_questions SQ
JOIN survey_lookup SL ON SL.qid = SQ.qid
JOIN tmp T ON T.survey_col = SL.survey_col
LEFT JOIN survey_answers SA ON SA.qid = SQ.qid
AND SA.code = T.value
AND SA.language = 'en'
LEFT JOIN survey_answers SA2 on SA2.qid = SQ.parent_qid
AND SA2.code = T.value
AND SA2.language = 'en'
WHERE SQ.language = 'en';
SET @sql = CONCAT('SELECT id, datestamp, ', @sql, ' FROM tmp GROUP BY id');
SELECT @sql;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
아마도 이것은 피벗 (pivoting) * 테이블이라고 알려져있을 것입니다. 목에 통증이 있다는 것을 MySQL에서 발견했습니다. –
동의합니다. 나는 필요한 데이터를 얻기가 매우 어려운 소프트웨어를 사용하고 있습니다. 나는 엄청나게 느린 데이터를 얻기 위해 커서를 사용하고 있었지만, 노동 조합이 훨씬 빨랐다는 것을 발견했다. 그래서 조인을 만들 수 있도록 데이터를 얻기 위해 유니온을 사용했습니다. 이제 그래프 화 소프트웨어에서 사용할 수있는 형식으로 변환하려고합니다. 나는 여러 가지를 시도했으며, 다른 솔루션을 4 분에 한 11 초 만에 실행되기 때문에 이것이 가장 좋은 것으로 보인다. –
이것은 SQL이 문제의 _ 과실한 해결책 일 때가 그 중 하나입니다. PHP/Java/형식을 지정할 코드를 작성하십시오. SQL을 사용하여 데이터를 제공하십시오. –