Transact SQL和Where语句和CASE语句

时间:2014-05-06 14:47:07

标签: sql-server tsql

我有多个连接的以下要求 - 目前此搜索查看客户的居住县。需要对此进行更改以查看tbl_client_insurance.region_id为消费者提供有效的有效保险。如果客户有多个符合此标准的保险,请使用县的ins_id = 2(医疗补助)。我相信我的大部分查询都是正确的,但是我在ti.ins_id上挂了,我相信我需要一个案例,基本上只返回2或者如果2不存在则返回客户确实有的保险

SELECT 
    ti.client_id, ti.exp_dt, ins_id, * 
FROM 
    tbl_Client AS tc
INNER JOIN 
    tbl_client_insurance AS ti ON ti.client_ID = tc.client_ID
WHERE 
    tc.client_id = 26 
    AND tc.active = 1
    AND (ti.exp_dt >= GETDATE() OR ti.exp_dt IS NULL)
    CASE
    --- Need some help here.

2 个答案:

答案 0 :(得分:0)

您可以将此类条件添加到您的连接逻辑

INNER JOIN tbl_client_insurance AS ti ON ti.client_ID = tc.client_ID AND ti.ins_id=2

答案 1 :(得分:0)

我不知道您想要的结果集是什么。 根据您的样本,您需要所有匹配的客户保险。 但似乎你可能只想要一个客户端。

如果您只想为该客户提供一个,这只是一个订购问题。 你应该使用UNION ALL。 第一部分是保险ID 2的查询。 第二部分是对所有其他保险的查询。 按您提供的新栏目订购。 对于第一部分,新列将是A. 对于第二部分,它将是B. 然后只占据前1行。

如果id 2存在,那么它将是第一个,否则它将是其他保险之一,或者如果没有匹配的保险,你将得到一个空的结果集。

那么问题就变成了如何在没有医疗补助的情况下告诉您选择哪些其他保险。这只是订购。