【发布时间】:2017-09-11 19:28:13
【问题描述】:
我正在尝试根据某种声明类型检索名称。看起来很容易,但它不适合我。我正在使用 2 个主表,claim 和 exposure,以及一个 contactname 表。每个claim 可以有多个exposures,但每个exposure 只能有一个claim。两个表都包含一个 nameID 字段 - claim.nameID 和 exposure.nameID。 nameID 与 ContactName 表相关。
Contact Name
ID Name111 Jim222 Bob333 John444 Sam555 Walt
通常,每个claim 可以有多个exposures,claim 上的exposures 可以有相同的名称或不同的名称。 ids 的名称可在 exposure 上找到。
The exposure.nameID joins ContactName.ID
Claim claim.nameID ExposureNo exposure.nameID NameA null 1 111 JimA null 2 222 BobA null 3 333 JohnB null 1 444 SamB null 2 444 Sam
工人赔偿要求不同。每个工人索赔可以有多个曝光,但所有曝光都具有相同的名称。由于声明上的曝光具有相同的名称,因此可以找到名称 ID,而不是在曝光表上,而是在声明表上。想想看……claim.nameID 加入 ContactName.ID 作为 ClaimContactName。
Claim claim.nameID ExposureNo exposure.nameID NameC 111 1 null JimC 111 2 null JimC 111 3 null JimD 555 1 null WaltD 555 2 null Walt
我可以获得非工人comp claims 的名称,并且可以获得workers comp claims 的名称。但是,当我将 2 个查询放在一起时,我没有得到任何结果。
Select
CASE WHEN @Select(Claim\Policy Type) = 'Workers'' Compensation' THEN
CASE WHEN ClaimContact.Name IS NULL AND ClaimContact.Name.FirstName IS NULL THEN ClaimContact.LastName
WHEN ClaimContact.Name IS NOT NULL THEN ClaimContact.Name
ELSE ClaimContact.FirstName + Space(1) + ClaimContact.LastName END
ELSE
CASE WHEN Contact.Name IS NULL AND Contact.FirstName IS NULL THEN Contact.LastName
WHEN Contact.Name IS NOT NULL THEN Contact.Name
ELSE Contact.FirstName + Space(1) + Contact.LastName END
END
这方面做得不多,但确实可以借助帮助来解决这个问题。先感谢您。
【问题讨论】:
-
这是什么味道和版本的宇宙?据我所知,Universe SQL 不接受 CASE WHEN 语法,所以我认为这是错误的,或者您正在使用与 Universe 交互的东西。