2015-12-01 20 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子句的組中的類似變化。