2015-12-01 22 views
1

我已经尝试了几种不同的方式,包括IF和CASE语句,但我不能完全看着办吧......如果U.LastName为空,我如何让Customer列忽略空格和逗号?

SELECT  U.Login AS Login, U.LastName + ', ' + U.FirstName AS Customer, 
     cast(cast(IsNull(sum(O.BillAmount), 0) as decimal(19,5)) as float) AS 'Total Billing', 
     MIN(O.DateOrderCreated) AS 'First Order',       
     MAX(O.DateOrderCreated) AS 'Last Order' 
FROM Orders O 
INNER JOIN Store S ON S.StoreID = O.StoreID 
INNER JOIN fn_UserStores(@ActiveUserId,12) US ON S.StoreId = US.StoreId 
INNER JOIN Users U ON U.UserID = O.UserID 
WHERE  (O.IsCart = 0) AND (U.StatusID <> 2) AND (O.IsSaveForLater = 0) 
GROUP BY U.Login, U.LastName + ', ' + U.FirstName ORDER BY U.LastName + ', ' + U.FirstName 
+0

下次会做。谢谢! –

+0

或者你可以编辑:^)。 http://i.stack.imgur.com/sDy36.png –

回答

1

您可以用CASE语句做到这一点:

SELECT Login, 
     Customer, 
     [Total Billing], 
     [First Order], 
     [Last Order] 
FROM 
(
    SELECT U.Login AS Login, 
      CASE WHEN U.LastName IS NOT NULL 
       THEN U.LastName + ', ' + U.FirstName 
       ELSE U.FirstName 
      END AS Customer, 
      cast(cast(IsNull(sum(O.BillAmount), 0) as decimal(19,5)) as float) AS 'Total Billing', 
      MIN(O.DateOrderCreated) AS 'First Order',       
      MAX(O.DateOrderCreated) AS 'Last Order' 
    FROM Orders O 
    INNER JOIN Store S ON S.StoreID = O.StoreID 
    INNER JOIN fn_UserStores(@ActiveUserId,12) US ON S.StoreId = US.StoreId 
    INNER JOIN Users U ON U.UserID = O.UserID 
    WHERE  (O.IsCart = 0) AND (U.StatusID <> 2) AND (O.IsSaveForLater = 0) 
) X 
GROUP BY Login, Customer 
ORDER BY Customer 
+0

当我尝试它时,我仍然收到“报告生成失败,请检查参数。”尽管第一个代码块运行得很好。 –

+0

对于多字别名使用双引号。 –

1

coalesce函数应该工作。更改此:

U.LastName + ', ' + U.FirstName AS Customer 

这样:

coalesce(U.LastName + ', ', '') + U.FirstName AS Customer 

让by子句的组中的类似变化。