简体   繁体   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

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM