我正在使用SSMS 2008,试图只选择一行/客户端。我需要选择以下列:client_name
,end_date
和program
。有些客户端只有一个客户端行。但其他人有多个。如何开发t-sql子查询,每个只选择一条记录?
对于那些有多行的客户,他们通常有不同的end_date
和program
。例如:
CLIENT PROGRAM END_DATE
a b c
a d e
a f g
h d e
h f NULL
这是一个真正的简化版本的实际数据。正如您将看到的,不同的客户端可以在同一个程序中(“d”)。但同一个客户不能在同一个程序中多次。
另外棘手的是end_date
可以是NULL,所以当我尝试选择具有> 1行的客户端时,我添加了HAVING语句> 1.但是这消除了我的所有NULL End_date
行。总结一下,我想每个客户端都有一行。因此,那些只有一行总数的客户+上面列出的客户使用以下标准:
- 只选择
End_date
最大或NULL的行。 (在大多数情况下,这些客户端的end_date
为空)。
我该如何用尽可能少的逻辑来实现?
我假设其中end_date为NULL的行优先于max(end_date)。但是,如果客户端对于两个不同的程序具有NULL end_date,应该返回什么,因为您只希望每个客户端返回一行? – user937146