编写SQL查询

时间:2019-07-16 17:39:55

标签: sql postgresql

我希望从具有雇员和配偶的表中获取结果。如果雇员有配偶,则该雇员和配偶应完成调查;如果雇员没有配偶,则该雇员必须完成调查。调查在另一个表“调查”中,完成状态代码为“ 3”。员工和配偶的数据在“用户表”中,由其ID标识,即员工的ID为10000,如果该员工有配偶,则配偶的ID为10001。您能帮我提取结果吗? >

用户表为

metric_rank

调查表

id, user_id, firsyt_name, last_name, email, status, date

如果用户ID为AE10000,则配偶为AE10001

到目前为止我的尝试:

survey_id,user_id,title, content,date, flag

Survey table

user table

我只需要员工详细信息,而不是配偶详细信息,但是如果员工有配偶,则配偶应完成调查;如果员工没有配偶,则用户应完成调查。

我想要的输出是:user_id,first_name,last_name,email

1 个答案:

答案 0 :(得分:0)

以下脚本将为您返回具有婚姻状况和配偶ID的用户列表。您能否从此输出中完成其余的工作?

SELECT DISTINCT LEFT(A.user_id,LEN(A.user_id)-1)+'0' user_id,
CASE 
    WHEN B.u_id IS NULL THEN 'Married' 
    ELSE 'Unmarried' 
END Status,
CASE 
    WHEN B.u_id IS NULL THEN NULL
    ELSE B.u_id + '1'
END Spouse_id
FROM [user] A
LEFT JOIN (
    SELECT LEFT(user_id,LEN(user_id)-1) u_id
    FROM [user]
    WHERE RIGHT(user_id,1)  = '1'
)B ON LEFT(A.user_id,LEN(A.user_id)-1) = B.u_id

输出将是-

user_id     Status      Spouse_id
A100010     Unmarried   A100011
A100020     Married     NULL
A100030     Married     NULL
A100040     Unmarried   A100041