2016-12-12 5 views
1
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, чтобы использовать только первое имя, то я хочу, чтобы сцепить Фамилия и Имясаз внутри SELECT,

+0

никогда ничего 'равно NULL'. И ничто никогда не будет равно NULL. Вместо этого вам нужно использовать 'IS NULL' и' IS NOT NULL'. – MatBailie

+0

Может быть, вы могли бы попробовать 'IS NULL' вместо' = NULL' –

ответ

0

Вы можете написать это как :

(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 
+0

Спасибо, я должен был знать лучше с знаком =, иногда C# любит ползать. –

0

NULL не является значением, поэтому он не может использовать =, <,> для сравнения с другим значением. Кстати, ваш случай, когда оператор может также делать с ISNULL

ISNULL(C.LastName + ', ','')+c.FirstName AS Name 
0

Вы не можете проверить, как = NULL, но вы можете проверить значение по умолчанию вместо этого, следующим образом или вы должны в том, что другие предложили :

CASE WHEN ISNULL(c.lastName,'') = '' THEN 
    ------- 
ELSE 
    ------- 
END 

Если вы используете SQLSERVER2008 +, то вы можете использовать CONCAT, а также:

CONCAT(ISNULL(c.lastname + ', ',''), c.firstname) as Name