2017-10-10 76 views
1

我有一個像下面這樣的查詢。表格之間的關係是:如何編寫此SQL Server查詢:在唯一行中添加值?

每輛卡車可能有多個司機。表列表將表卡車中的每一行與表格驅動程序中的行連接起來。現在我想在特定條件下獲得唯一卡車的數量,以及在這種情況下唯一卡車的總大小。

以下是我有:

SELECT t.Year AS [Year] 
     , t.Month AS [Month] 
     , t.Day AS [Day] 

     -- Count will not count NULL 
     , COUNT(DISTINCT (CASE WHEN (t.Sent = 1 AND r.Internal=1) THEN L.TruckId 
       ELSE NULL 
      END)) AS [Count] 

     , SUM(CASE WHEN (t.Sent = 1 AND r.Internal = 1) THEN t.Size 
      END) AS [Size] 

FROM Truck t 
INNER JOIN List L ON t.Id = L.TruckId 
     INNER JOIN Driver r ON L.DriverId = r.Id 
GROUP BY t.Year, t.Month, t.Day 
  • 計數是正確的,但和不爲。

我的問題是如何得到這個SUM? 我不想寫2個查詢並加入。

感謝

+0

請提供樣本數據和預期的結果。 –

+0

你是什麼意思,當你說「總和不是」?,你期望什麼值?,首先我建議你使用像這樣的「else」子句:SUM(CASE WHEN(t.Sent = 1 AND r.Internal = 1)THEN t.Size ELSE 0 END)AS [Size] –

回答

2

您可以嘗試像下面的查詢:

; with cte as (
SELECT 
    DISTINCT 
     t.Year AS [Year] 
    , t.Month AS [Month] 
    , t.Day AS [Day] 
    , L.TruckId, 
    , t.Size 
FROM Truck t 
INNER JOIN List L ON t.Id = L.TruckId 
INNER JOIN Driver r ON L.DriverId = r.Id 
WHERE t.Sent = 1 AND r.Internal=1 
) 
select 
     Year 
    , Month 
    , Day 
    , count(TruckId) AS [Count] 
    , sum(Size) AS [Size] 
from cte 
group by Year, Month, Day 
+0

這在功能上並不相同!問題中的查詢將返回卡車,無論:'t.Sent = 1 AND r.Internal = 1' –

+0

對不起,忽略這一點,弄錯了。道歉。 –