的值我的当前sae_table(id,cbid,description,value)如图所示。表的交叉表功能没有携带沿着
我想转动它,所以它可以是这样的:
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 ....
我已经tryied做用ID,说明和值交叉表,但所有的值只有每月栏下显示。
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,说明和值摆动而已。但它只显示独特的cbids。在这种情况下,一个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第二条目,当那些条目应一直保持)其结果是:
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”? (顺便说一句,以文本形式提供数据,不提供图像)。 – klin
应该有一个独特的值来确定哪个日期或测试或“实际值”是2. 3.或第n个60051的一部分?第二个问题:如果这些值以未排序的方式插入,如何分隔每个60051行组? –
就这样想,60051代表一个病人,那个病人在不同的日期可以有多个实验室。这就是为什么你反复看到60051的原因。所以一个cbid可以有多个条目,但每个条目都有一个唯一的id。但是,为什么当我执行SELECT * FROM CROSSTAB('SELECT id,description,value from sae_test')时,所有数据都显示在第二列之下? –