簡體   English   中英

SELECT中的case語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM