제목이 모두 있습니다.postgres tablefunc crosstab() 함수의 범주를 정수로 지정할 수 있습니까?
SELECT *
FROM crosstab('...') AS ct(row_name text, category_1 text, category_2 text);
내가 두 테이블, lab_tests
및 lab_tests_results
을 가지고 문서는 다음과 같이 있습니다. lab_tests_results
행은 모두 lab_tests
테이블의 기본 키 ID 정수에 연결됩니다. 실험실 테스트 (정수로 식별)가 행 머리글이고 각 결과가 테이블에있는 피벗 테이블을 만들려고합니다. 나는 정수에서 또는 그 둘레에서 구문 오류를 해결할 수 없다.
현재 설정으로 가능합니까? 문서에서 뭔가 빠졌습니까? 또는 범주 문자열을 만들기 위해 일종의 내부 조인을 수행해야합니까? 또는 실험실 테스트에 텍스트 식별자를 사용하도록 lab_tests_results
테이블을 수정 하시겠습니까?
도움을 주셔서 감사합니다. 매우 감사.
편집 : 드미트리의 도움으로 알아 냈습니다. 그는 데이터 레이아웃을 알아 냈습니다. 그러나 내가 필요한 출력이 무엇인지 명확하지 않았습니다. 피벗 테이블을 lab_tests_results 테이블의 batch_id 번호를 기반으로 만들려고했습니다. 기본 쿼리를 캐스팅하고 데이터 유형을 캐스팅해야했습니다. 이 아래처럼 lab_tests_results 테이블에서 피벗 테이블을 제공
SELECT *
FROM crosstab('SELECT lab_tests_results.batch_id, lab_tests.test_name, lab_tests_results.test_result::FLOAT
FROM lab_tests_results, lab_tests
WHERE lab_tests.id=lab_tests_results.lab_test AND (lab_tests.test_name LIKE ''Test Name 1'' OR lab_tests.test_name LIKE ''Test Name 2'')
ORDER BY 1,2'
) AS final_result(batch_id VARCHAR, test_name_1 FLOAT, test_name_2 FLOAT);
:
CREATE TABLE lab_tests (
id INTEGER PRIMARY KEY,
name VARCHAR(500)
);
CREATE TABLE lab_tests_results (
id INTEGER PRIMARY KEY,
lab_tests_id INTEGER REFERENCES lab_tests (id),
result TEXT
);
그리고 당신의 데이터는 다음과 같은 : 내가 이해한다면
batch_id |test_name_1 |test_name_2
---------------------------------------
batch1 | result1 | <null>
batch2 | result2 | result3
감사 드미트리. 네가 제공 한 것으로 생각한 결과를 얻었다. 그것을 보여주기 위해 원래 게시물을 편집했습니다. – user1644030