0
我有一個SQL Server數據庫,我試圖提取特定的數據。我需要計算每行中的所有非空列,從另一列中減去一列,以及從其他表列(連接)中獲取數據。在困難的時候計算出如何計算連續的非空值以及連接和計算
這就是我所在的地方,有人可以看看代碼並告訴我我做錯了什麼(忽略硬編碼的日期,它們僅用於測試)?
SELECT
((CASE WHEN TC.Time0 IS NOT NULL THEN 1 ELSE 0 END)
+ (CASE WHEN TC.Time1 IS NOT NULL THEN 1 ELSE 0 END)
+ (CASE WHEN TC.Time2 IS NOT NULL THEN 1 ELSE 0 END)
+ (CASE WHEN TC.Time3 IS NOT NULL THEN 1 ELSE 0 END)
+ (CASE WHEN TC.Time4 IS NOT NULL THEN 1 ELSE 0 END)
+ (CASE WHEN TC.Time5 IS NOT NULL THEN 1 ELSE 0 END)
+ (CASE WHEN TC.Time6 IS NOT NULL THEN 1 ELSE 0 END)
+ (CASE WHEN TC.Time7 IS NOT NULL THEN 1 ELSE 0 END)
+ (CASE WHEN TC.Time8 IS NOT NULL THEN 1 ELSE 0 END)
+ (CASE WHEN TC.Time9 IS NOT NULL THEN 1 ELSE 0 END)) AS [Time Punches]
,SUM(CASE WHEN TC.Odometer0 IS NOT NULL THEN 1 ELSE 0 END) AS MileageStart
,SUM(CASE WHEN TC.Odometer1 IS NOT NULL THEN 1 ELSE 0 END) AS MileageEnd
,SUM(CASE WHEN MileageEnd >= 0 THEN 1 ELSE 0 END) -
SUM(CASE WHEN MileageStart < 0 THEN 1 ELSE 0 END) AS [Total Miles]
,D.DriverID AS [Driver ID]
,W.FirstName +' '+W.LastName AS [Driver Name]
,TC.PunchDate AS [DATE]
FROM tblTimeClock TC WITH (NOLOCK)
INNER JOIN tblDrivers D WITH (NOLOCK)
ON D.DriverID = TC.PunchID
INNER JOIN tblWorker W WITH (NOLOCK)
ON W.WorkerID = D.DriverID
WHERE TC.PunchID IS NOT NULL
AND TC.PunchDate BETWEEN '2017-05-01' AND '2017-06-01'
ORDER BY TC.PunchDate
通過以上我收到此錯誤:
>,因爲它不是在聚合函數或GROUP BY子句中包含列「tblTimeClock.Time0」在選擇列表中無效。
但我不知道如何將其包含在GROUP BY子句中 - 每次嘗試時都會彈出其他錯誤(不同,取決於放置子句的位置)。
我問及是否有人可以「告訴我我做錯了什麼」的原因是,一旦我解決了什麼問題,我不必一次又一次地爲每個後續問題回答「幫助」 。我知道代碼很糟糕,這就是爲什麼我需要幫助。
你沒有解釋一個問題,或者問了一個問題。 (*你能告訴我什麼是錯的嗎?*不是一個可回答的問題。)描述你在發佈的SQL時遇到的問題。 –
如果你想獲得非空列的計數,請參閱https://stackoverflow.com/questions/18193365/count-of-non-null-columns-in-each-row –
已更新,以解釋問題並澄清問的問題。 –