【发布时间】:2015-11-17 15:32:59
【问题描述】:
我有以下练习:
连接名字,中间名,姓氏和名字后缀以形成 采用以下格式的客户姓名:FirstName [MiddleName.] 姓[,后缀]。请注意,应省略 NULL 值。
我将其解释为以下场景(根据图像创建表并插入一些值):
请在下面找到我的示例数据,名称是#TB_Customer CustomerName 列是预期结果,格式应为
-
FirstName MiddleName.LastName, Suffix如果我有所有人的礼物 字段。 MiddleName 和 Suffix 可以是可选的,所以情况是:
如果有
suffix,但没有MiddleName,则CustomerName
格式应为Firstname LastName,Suffix如果有
MiddleName,但没有suffix,则CustomerName
格式应为FirstName MiddleName.LastName如果
MiddleName和Suffix都为空,那么CustomerName应该 格式为FirstName LastName)
但正如您所见,我编写的 CustomerName 案例查询没有按预期工作(请参阅上面的 cases 和项目符号)
我为获取CustomerName 列而编写的查询是:
SELECT
(case
when (MiddleName is not null and Suffix is not null) then
CONCAT(c.FIRSTNAME,' ', c.MiddleName,'.', c.LASTNAME, ', ',Suffix)
when (MiddleName is null and suffix is null) then
CONCAT(c.FIRSTNAME,' ' ,c.LASTNAME)
when (MiddleName is null and Suffix is not null )then
concat (c.FirstName, ' ', c.LastName, ', ',Suffix )
when (Suffix is null and MiddleName is not null) then
concat (c.FirstName, ' ',MiddleName,'.',LastName)
end
)AS CustomerName
,c.*
FROM #TB_Customer c;
我有两个问题:
- 我是否理解了这个练习,我的逻辑是否合理?
- 我在哪里做错了,正确的查询是什么?
使用 SQL-Server 2012
编辑
要重新创建我的场景,请参阅下面的代码(抱歉没有链接小提琴,但网站在我当前位置没有响应)
CREATE TABLE #TB_Customer
(
CustomerID int , --PK
Title varchar(50),
FirstName varchar(50),
MiddleName varchar(50),
LastName varchar(50),
Suffix varchar(50),
EmailAddress varchar(50),
Phone varchar(50),
Gender varchar(50),
Birthdate varchar(50),
--no fk
PRIMARY KEY (CustomerID)
)
insert into #TB_Customer values
('1','Sir','John','Jacob','Adams','St','johnJacobAdams@gmail.com','0677731235','M','1989-04-06'),
('2','Mr.','Russel','Thyrone','Peterson','pr','thyronePeterson@yahoo.com','555-010405','M','1963-02-01'),
('3','Ms.','Anne','Candice','Acola','aca','CandiceA@gmail.com','07408989989','F','1988-05-19'),
('4','Mrs.','Sophia','Veronika','Turner','tvs','SophiaVT@facebook.de','0423423887','F','1983-06-20'),
('5','Ms','Margaret','','Delafleur','','delaMarg@yahoo.co','233223355','Female','1982-02-25'),
('6','Mrs','Jessica','Luana','Cruz','','Jess@yahoo.com','787876631','Female','1922-05-05'),
('7','Mr','Dyrius','','Cruz','dc','dyr33@yahoo.com','0673332211','Male','1987-03-01')
update #TB_Customer
set Gender = 'Male' where Gender = 'M'
update #TB_Customer
set Gender = 'Female' where Gender = 'F'
【问题讨论】:
-
@DanBracuk 请参见预期结果中的第 5 行。那不行。还有第 7 行
-
当您没有显示结果时,我们应该如何看到您的查询不起作用?此外,您列出了三种情况,而您的代码有四种,而且顺序相当奇怪。
-
所以你的“预期结果”实际上并不是你所期望的,而是你实际得到的?
-
@Henrik 有4种情况,第一种是每个字段都是
not null的场景。该列的预期值在项目符号列表中。将编辑并用项目符号放置第 4 个案例 -
您是否意识到您正在检查 NULL 但样本数据中的任何地方都没有一个 NULL?
标签: sql sql-server tsql sql-server-2012