![](/img/trans.png)
[英]SELECT STATEMENT IN A CASE STEMENT INSIDE A SELECT STATEMENT
[英]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
我試圖得到它,如果姓氏出現NULL只使用第一個名稱,否則我想連接姓氏和名字
你可以這樣寫:
(CASE WHEN C.LastName IS NULL THEN C.FirstName
ELSE (C.LastName + ', ' + C.FirstName)
END) AS Name,
或者只使用COALESCE()
:
(COALESE(C.LastName + ', ', '') + C.FirstName) as Name
NULL不是值,因此不能使用=,<,>與其他值進行比較。 BTW,你的情況何時聲明也可以用ISNULL
ISNULL(C.LastName + ', ','')+c.FirstName AS Name
您不能檢查為= NULL,但您可以通過以下方式檢查默認值,或者您必須采用其他人建議的方式:
CASE WHEN ISNULL(c.lastName,'') = '' THEN
-------
ELSE
-------
END
如果您使用的是SQLSERVER2008 +,那么您也可以使用CONCAT:
CONCAT(ISNULL(c.lastname + ', ',''), c.firstname) as Name
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.