我有必要建立從姓,名,按以下規則中初始的字符串:SQL - 場串聯,基於可變
- 如果姓是獨一無二的,只是 回報姓氏
- 如果最後 名稱不是唯一的,但名字的第一個字母 是獨一無二的, 回報姓+的 名
- 第一個字母如果姓和 第一萊特名字的r是 不唯一,返回姓氏+ 名字+中間的第一個字母 首字母縮寫。
例如,該表可能是:
MDC MDLast MDFirst MDInit
3 Jones Fred A
21 Smith Sam D
32 Brown Tom E
42 Brown Ted A
55 Smith Al D
查詢應返回:
MDC MDFormattedName
3 Jones
21 Smith S
32 Brown TE
42 Brown TA
55 Smith A
我已經寫了一個查詢,差不多的作品,但它使用幾個嵌套查詢,並且仍然需要更多(可能)制定可行的解決方案,並且效率非常低。我確信有一個'正確'的方法來實現這個(對於SQL Server 2005,BTW)。
這是我到目前爲止。它不起作用,由於我丟失的聚合ID可能無法做最後的連接來獲得ID /名稱對。
select
CASE
WHEN CountLastFirst > 1 THEN
CASE WHEN MDInit IS NOT NULL THEN MDLastFirst + LEFT(MDInit,1) ELSE MDLastFirst END
WHEN CountLastFirst = 1 AND CountLast > 1 THEN MDLastFirst
ELSE MDLast
END as MDName
FROM
(
select x.MDLast, CountLast, MDLastFirst, CountLastFirst FROM
(
select MDLast,Count(MDLast) as CountLast FROM
MDList
GROUP BY MDLast) as x
INNER JOIN
(select MDLast, MDLastFirst,Count(MDLastFirst) as CountLastFirst FROM
(
select MDLast,
MDLast + ' ' + LEFT(MDFirst,1) as MDLastFirst
From MDList
) as a
GROUP BY MDLastFirst, MDLast) as y ON x.MDLast = y.MDLast
) as z
非常好,謝謝。我從來沒有在ON子句中使用表達式,這是一個很好的技巧。我試圖找出如何加入MDC索引,但沒有一個明顯的方法來做到這一點。 – BridgetG 2010-10-14 20:23:40