[英]Case statement inside a SELECT
ALTER PROCEDURE Transform.usp_CustomerInfo
AS
BEGIN
TRUNCATE TABLE [Transform].[CustomerInfo]
INSERT INTO [Transform].[CustomerInfo] (CustomerName, Total, AvgPurchaseTime, StoreName)
SELECT
CASE
WHEN C.LastName = NULL THEN C.FirstName
ELSE (C.LastName + ', ' + C.FirstName)
END AS 'Name',
SUM(T.Total),
D.FullDate,
UPPER(C.StoreName) AS 'Store Name'
FROM
[Extract].[DimTransaction] AS T
JOIN
[Extract].[DimCustomer] AS C ON T.CustomerID = C.CustomerID
JOIN
[Extract].[DimState] AS S ON C.StateID = S.StateID
JOIN
[Extract].[DimDateTime] AS D ON D.DateTimeID = T.TransactionID
GROUP BY
C.LastName, C.FirstName, D.FullDate, C.StoreName
ORDER BY
Convert(date, D.FullDate, 101) ASC
I am trying to get it where if the Last Name comes up NULL to only use the first name else I want to concatenate Last Name and First Name 我试图得到它,如果姓氏出现NULL只使用第一个名称,否则我想连接姓氏和名字
You can write this as: 你可以这样写:
(CASE WHEN C.LastName IS NULL THEN C.FirstName
ELSE (C.LastName + ', ' + C.FirstName)
END) AS Name,
Or just use COALESCE()
: 或者只使用COALESCE()
:
(COALESE(C.LastName + ', ', '') + C.FirstName) as Name
NULL is not a value, so it can't use =,<,> to compare with other value. NULL不是值,因此不能使用=,<,>与其他值进行比较。 BTW, your case when statement also can do with ISNULL BTW,你的情况何时声明也可以用ISNULL
ISNULL(C.LastName + ', ','')+c.FirstName AS Name
You can't check as = NULL but you can check the default value instead, in the following way or you have to in the way that others suggested: 您不能检查为= NULL,但您可以通过以下方式检查默认值,或者您必须采用其他人建议的方式:
CASE WHEN ISNULL(c.lastName,'') = '' THEN
-------
ELSE
-------
END
IF you are using SQLSERVER2008+ then you can use CONCAT as well: 如果您使用的是SQLSERVER2008 +,那么您也可以使用CONCAT:
CONCAT(ISNULL(c.lastname + ', ',''), c.firstname) as Name
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.