我在google上搜索了很多遍,但我认为我没有使用正确的关键字来得到我想要的结果。如果已经有人问过这个问题,请重新引导我回答这个问题。如果没有,我希望你能理解我在找什么。
一个简单的背景:我是sql语言的新手,我自学了一段时间。我在一家心理健康组织工作,他们使用的是可靠的电子健康记录。它有一个报告选项卡,我可以建立一个出口报告使用可信的“查询建设者2.0”,这是一个定制的特设。我已经能够建立一个报告,显示我的新成员名单及其主要中心没有任何问题。
现在我正在构建一个报告,它将告诉我哪些成员只有一个名为“no contact”的访问类型。我想跳过的成员,有其他访问类型,包括“没有联系”,我还没有任何成功。我用表格id把它过滤掉354'是无接触访问类型。
我不需要它来显示最新的唱片。
[client_id] | [last_name] | [first_name] | [form_id]
[ 10001 ] | [ Doe ] | [ John ] | [ 354 ]
[ 10001 ] | [ Doe ] | [ John ] | [ 445 ]
[ 10001 ] | [ Doe ] | [ John ] | [ 431 ]
[ 10001 ] | [ Doe ] | [ John ] | [ 515 ]
[ 10002 ] | [ Ghost ] | [ Jane ] | [ 354 ]
[ 10002 ] | [ Ghost ] | [ Jane ] | [ 354 ]
我想看到的结果只有jane ghost,因为在整个记录中输入的唯一访问类型是“no contact”,我希望它能够跳过john doe,因为john有超过1种不同的访问类型。
这是我到目前为止键入的代码,我只是不知道使用哪个语句才能得到我想要的结果。是“case”语句还是“groupby”语句?这就是我一直在努力寻找的。也许这根本不可能。
Select C.client_id,
C.last_name,
C.first_name,
V.form_id as form_id
From Clients C
Left Outer Join ClientVisit CV On C.client_id = CV.client_id
Inner Join VisitType V On CV.visittype_id = V.visittype_id
Inner Join Forms F On F.form_id = V.form_id
Order By C.last_name,
C.first_name
任何导游都将不胜感激。如果这已经被问到了,我提前道歉。
编辑以添加更新代码
我差点就拿到了,但它显示的不是354的身份证号码。我可以使用空值,但我需要它不显示除354以外的所有内容。
Select C.client_id,
C.last_name,
C.first_name,
P.program_code As prim_program
From Clients C
Inner Join ClientPrograms CP On C.client_id = CP.client_id
Inner Join Programs P On CP.program_id = P.program_id
Where C.client_status = 'active' And CP.primary_flag = 'true'
Except
Select CV.client_id,
CV.clientlastname,
CV.clientfirstname,
P.program_code
From ClientVisit CV
Inner Join VisitType V On CV.visittype_id = V.visittype_id
Inner Join ClientPrograms On CV.client_id = ClientPrograms.client_id
Inner Join Programs P On P.program_id = ClientPrograms.program_id
Where V.form_id <> 354
Order By prim_program,
last_name,
first_name Desc
2条答案
按热度按时间zqdjd7g91#
如果某人的访问类型不是“无联系人”,您需要将其删除吗?您首先需要构建一个只有“无联系人”访问类型的用户id列表,然后将其与您的其他信息合并。
一种可能的方法是:
选择所有客户端ID
从该查询中,排除所有visittype不是“no contact”的客户端ID。
然后将结果与其他列连接起来。
比如:
这将选择clients中的每个client\u id,然后删除所有访问类型不是“no contact”的client行。请注意,这仍然会留下一行从未访问过的客户ID,因为他们没有非“无联系人”访问:d
(然后将上述结果与其他表/列连接起来。)
根据您使用的sql,重要操作符可以是except,也可以是where not exists。用谷歌搜索其中任何一个都可能让你走上正轨。
或者:
不要这样做:
这将错误地选择每个曾经有过“无联系人”约会的人。相当于:
(这也是错误的……):d
vptzau2j2#
代码的潜在解决方案。感谢@itnaanti给了我一个开始!
就我所知,为成员的开始日期设置日期范围会产生巨大的差异。