我正在使用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