【发布时间】:2020-01-24 15:22:31
【问题描述】:
我在query 中有以下声明:
CASE
WHEN "PI".statusid_dec = 'Entered'
and "PI".pagename = 'Procedural Information'
and "PI".pishact IS NULL
then 'ACT (Activated Clotting time)'
END
问题是,如果有 "PI".pagename is NOT 'Procedural Information' 的记录,我会为这些情况获得额外的(空白)行。如何修改此查询,以便每次 'case when' 语句完全匹配时我只得到一行?
完整查询:
SELECT
DISTINCT "DAT_SUB".SUBNUM as "Subject ID",
CONCAT_WS(',',
CASE WHEN "DM".statusid_dec = 'Entered' and "DM".sex IS NULL then 'Gender'
END,
CASE WHEN "DM".statusid_dec = 'Entered' and "DM".brthyr IS NULL then 'Year
of
Birth' END,
CASE WHEN "DM".statusid_dec = 'Entered' and "DM".icdat IS NULL then
'Informed
consent date' END) as "Demographics",
CASE WHEN "PI".statusid_dec = 'Entered' and "PI".pagename = 'Procedural
Information' and "PI".pishact IS NULL then 'ACT (Activated Clotting time)'
END
as "Procedure"
FROM "Disco_Radial"."DAT_SUB"
//These are all the tables I want to add similar case-statements for. They
are currently not being used yet, because I wanted to solve this issue
above first.
LEFT JOIN "Disco_Radial"."ACM" ON "Disco_Radial"."ACM".SUBNUM =
"DAT_SUB".SUBNUM
LEFT JOIN "Disco_Radial"."AE" ON "Disco_Radial"."AE".SUBNUM =
"DAT_SUB".SUBNUM
LEFT JOIN "Disco_Radial"."CH" ON "Disco_Radial"."CH".SUBNUM =
"DAT_SUB".SUBNUM
LEFT JOIN "Disco_Radial"."CL" ON "Disco_Radial"."CL".SUBNUM =
"DAT_SUB".SUBNUM
LEFT JOIN "Disco_Radial"."CRF" ON "Disco_Radial"."CRF".SUBNUM =
"DAT_SUB".SUBNUM
LEFT JOIN "Disco_Radial"."DIS" ON "Disco_Radial"."DIS".SUBNUM =
"DAT_SUB".SUBNUM
LEFT JOIN "Disco_Radial"."DM" ON "Disco_Radial"."DM".SUBNUM =
"DAT_SUB".SUBNUM
LEFT JOIN "Disco_Radial"."IE" ON "Disco_Radial"."IE".SUBNUM =
"DAT_SUB".SUBNUM
LEFT JOIN "Disco_Radial"."LB" ON "Disco_Radial"."LB".SUBNUM =
"DAT_SUB".SUBNUM
LEFT JOIN "Disco_Radial"."PA" ON "Disco_Radial"."PA".SUBNUM =
"DAT_SUB".SUBNUM
LEFT JOIN "Disco_Radial"."PE" ON "Disco_Radial"."PE".SUBNUM =
"DAT_SUB".SUBNUM
LEFT JOIN "Disco_Radial"."PI" ON "Disco_Radial"."PI".SUBNUM =
"DAT_SUB".SUBNUM
LEFT JOIN "Disco_Radial"."SE" ON "Disco_Radial"."SE".SUBNUM =
"DAT_SUB".SUBNUM
LEFT JOIN "Disco_Radial"."SS" ON "Disco_Radial"."SS".SUBNUM =
"DAT_SUB".SUBNUM
LEFT JOIN "Disco_Radial"."VS" ON "Disco_Radial"."VS".SUBNUM =
"DAT_SUB".SUBNUM
LEFT JOIN "Disco_Radial"."DAT_RAND" ON "Disco_Radial"."DAT_RAND".SUBNUM =
"DAT_SUB".SUBNUM
LEFT JOIN "Disco_Radial"."DAT_PAGS" ON "Disco_Radial"."DAT_PAGS".SUBNUM =
"DAT_SUB".SUBNUM
ORDER BY "DAT_SUB".subnum;
输出如下所示:
"DR-05-001";"";"ACT(活化凝血时间)" “DR-05-001”;“”;“” "DR-05-002";"";"ACT(活化凝血时间)" "DR-05-003";"";"ACT(活化凝血时间)" "DR-05-004";"";"ACT(活化凝血时间)" "DR-05-005";"";"ACT(活化凝血时间)" "DR-05-006";"";"ACT(活化凝血时间)"
...
问题在于像 DR-05-001 这样的记录,它在“PI”表中的行没有页面名称“程序信息”。
【问题讨论】:
-
整个查询会更好
-
@Zegher V 更改要求会使您已经获得的答案无效。您应该发布一个新问题,您可以在其中解释您想要什么。
标签: sql postgresql