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 –
已更新,以解释问题并澄清问的问题。 –