내 현재 sae_table (id, cbid, description, value)은 그림과 같습니다.테이블에 대한 크로스 탭 기능에 값이 없습니다.
은 내가 피벗하려는, 그래서 다음과 같이 할 수 있습니다 : 나는 ID, 설명 및 값을 사용하여 교차 분석을하고 tryied 한
id cbid month day year test actual_value normal_ran no
1 60051 09 27 2016 "Urinary" "some vegetans"
2 60051 09 30 2016 "Chest"
3 60052 ....
하지만, 모든 값 달 열 아래에만 표시됩니다.
SELECT * FROM CROSSTAB('SELECT id, description,value from sae_test')
AS ct ("id" integer, "Month" character varying(4000),"Day" character varying(4000),"Year" character varying (4000),
"Test" character varying(4000),"Actual Value" character varying(4000),"Normal Range" character varying(4000),"No Test option" character varying(4000));
교차 분석 결과 위 (값은 제대로 전체의 열을 배포하지 않음) :
id Month Day Year ...
1 09 ...
2 27 ...
3 2016 ...
나는 또한 cbid, 설명 및 값을 사용하여 단지 선회했습니다. 그러나 그것은 구별되는 단서만을 보여줍니다. 그리고이 경우 하나의 cbid는 여러 행을 가질 수 있습니다.
SELECT * FROM CROSSTAB('SELECT * from sae_rel_data2()')
AS ct ("CBID" character varying(4000), "Month" character varying(4000),"Day" character varying(4000),"Year" character varying (4000),
"Test" character varying(4000),"Actual Value" character varying(4000),"Normal Range" character varying(4000),"No Test" character varying(4000));
상기 (해당 항목이 유지되어 있어야 할 때, 동일한 cbid하는 제 2 엔트리를 제거) 된 질의에 대한 결과 : 갱신
cbid month day year ...
60051 09 27 2016 ...
60052 ...
60053 09 27 2016 ...
60029 ...
:
CBID에 대한 n 번째 레코드를 식별하는 데 도움이되는 서수가 있으면 어떻게됩니까? 그런 다음 각 서수 수준의 cbid에 대한 크로스 탭을 수행 할 루프 함수를 만든 다음 각각을 UNION 또는 JOIN 문과 결합 할 수 있습니까? 그게 효과가 있니? 그렇다면 어떻게 그 루프를 만들 수 있습니까? 나는 그것에 익숙하지 않다.
예 : 같은
event_crf_id; description, value, ordinal
444; "CBID"; "60051"; 1
444; "Month"; "09"; 1
444; "Day"; "27"; 1
444; "Year"; "2016"; 1
444; "Test"; "Urinary tract US"; 1
444; "Actual Value"; "some vegetans lesions"; 1
444; "Normal Range"; ""; 1
444; "No tests option"; ""; 1
444; "Month"; "09"; 2
444; "Day"; "30"; 2
444; "Year"; "2016"; 2
444; "Test"; "Chest/abdomen CT"; 2
444; "Actual Value"; "3 bladder lesions"; 2
444; "Normal Range"; ""; 2
444; "No tests option"; ""; 2
뭔가 :
count=count (distinct ordinal) from sae_test()
for each event_crf_id in (select * from sae_test() where ordinal=count)
SELECT * FROM CROSSTAB('SELECT event_crf_id, description, value from sae_test())
JOIN ...
count=count+1
는 가능성이 있습니까? 이 조인은 어떻게 수행 될 수 있습니까? 또는 postgres는 루프에서 새로운 항목이 테이블에 계속 추가된다는 것을 자동으로 알고 있습니까? (죄송합니다, 저는 Postgres와 데이터베이스 전반에 대해 처음으로 익숙합니다.)
데이터가 모호합니다. '60051' 행과 'Day' 행에 대해 어떤 값을 제시해야합니까? '27'또는 '30'이어야합니까? (Btw, 텍스트로 데이터를 전달하고 이미지는 제공하지 않음). – klin
어떤 날짜 또는 테스트 또는 '실제 값'이 2. 3. 또는 n 번째 60051의 일부인지를 결정하는 고유 한 값이 있어야합니까? 두 번째 질문 : 이러한 값이 정렬되지 않은 방식으로 삽입되는 경우 각 60051 행 그룹을 어떻게 구분합니까? –
이렇게 생각하면 60051이라는 숫자는 환자를 나타내며 그 환자는 다른 날짜에 여러 개의 실험실을 가질 수 있습니다. 그래서 60051을 반복해서 볼 수 있습니다. 따라서 하나의 cbid는 여러 개의 항목을 가질 수 있지만 각 항목에는 고유 한 ID가 있습니다. 그런데 왜 내가 SELECT * FROM CROSSTAB ('select id, description, value from sae_test')를 할 때 모든 데이터가 두 번째 열 아래에 표시됩니까? –