Sql 计算列中的每个值
我很难提出问题。我希望有人能帮助我 假设我有一个类似这样的数据库Sql 计算列中的每个值,sql,sql-server,Sql,Sql Server,我很难提出问题。我希望有人能帮助我 假设我有一个类似这样的数据库 DateandTime PartNum FwVerOrErrDesc Pass date1 A 1 0 date2 A 1 0 date3 B 1 0 date4 B 3 0 date5
DateandTime PartNum FwVerOrErrDesc Pass
date1 A 1 0
date2 A 1 0
date3 B 1 0
date4 B 3 0
date5 C 2 0
date6 A 3 0
date7 C 1 0
date8 B 2 0
date9 B 1 0
PartNum FwVerOrErrDesc Count
A 1 2
A 3 1
B 1 2
B 2 1
B 3 1
C 1 1
C 2 1
总结一下,我有日期,本例中的模型类型a、B和C,但在实际数据库中,我有100多个不同的模型,在FwVerOrErrDesc上,我有一种类型的故障,同样,我有许多类型的故障,通过表示机组故障
我想生成一个查询,告诉我在一个特定的故障中有多少个单元发生了故障,但是,由于在不同的模型上有相同的故障,我无法计算故障数(FwVerOrErrDesc)并按它们排序,因为我只得到了故障总数,比如说“1”但是在所有的模型中,我也想被模型所区别。(PartNum为模型)
我想要达到的是这样的目标
DateandTime PartNum FwVerOrErrDesc Pass
date1 A 1 0
date2 A 1 0
date3 B 1 0
date4 B 3 0
date5 C 2 0
date6 A 3 0
date7 C 1 0
date8 B 2 0
date9 B 1 0
PartNum FwVerOrErrDesc Count
A 1 2
A 3 1
B 1 2
B 2 1
B 3 1
C 1 1
C 2 1
我试过这样的方法:
SELECT
PartNum
, [FwVerOrErrDesc]
, COUNT(FwVerOrErrDesc)
FROM [RceTestwareMfrLog].[dbo].[RceLogData]
WHERE Pass=0 and DateAndTime > DATEADD(day,DATEDIFF(day,'20010101',GETDATE()),'2001-01-01T06:00:00')
and DateAndTime < DATEADD(day,DATEDIFF(day,'20010101',GETDATE()),'2001-01-01T14:00:00') and
substring(SerialNum,1,8) <> '11111111'
GROUP BY [PartNum]
选择
帕纳姆
,[FwVerOrErrDesc]
,计数(FwVerOrErrDesc)
来自[RceTestwareMfrLog]。[dbo]。[RceLogData]
其中Pass=0,DateAndTime>DATEADD(day,DATEDIFF(day,'20010101',GETDATE()),'2001-01-01T06:00:00')
和DateAndTime
但我犯了个错误
我希望有人能帮助我,非常感谢您的帮助。您需要在Group by子句中包含[FwVerOrErrDesc]列。试试这个
SELECT
PartNum
, [FwVerOrErrDesc]
, COUNT(FwVerOrErrDesc) as [count]
FROM [RceTestwareMfrLog].[dbo].[RceLogData]
WHERE Pass=0 and DateAndTime >
DATEADD(day,DATEDIFF(day,'20010101',GETDATE()),'2001-01-01T06:00:00')
and DateAndTime < DATEADD(day,DATEDIFF(day,'20010101',GETDATE()),'2001-01-01T14:00:00')
and
substring(SerialNum,1,8) <> '11111111'
GROUP BY [PartNum],[FwVerOrErrDesc]
选择
帕纳姆
,[FwVerOrErrDesc]
,计数(FwVerOrErrDesc)为[计数]
来自[RceTestwareMfrLog]。[dbo]。[RceLogData]
其中Pass=0,DateAndTime>
DATEADD(day,DATEDIFF(day,'20010101',GETDATE()),'2001-01-01T06:00:00')
和DateAndTime
如果我理解正确,我会将查询写为:
SELECT PartNum, FwVerOrErrDesc, COUNT(FwVerOrErrDesc)
FROM [RceTestwareMfrLog].[dbo].[RceLogData]
WHERE Pass = 0 AND
DATEPART(hour, DateAndTime) BETWEEN 6 AND 13 AND
SerialNum NOT LIKE '11111111%'
GROUP BY PartNum, FwVerOrErrDesc;
当然,问题(正如我在评论中提到的)是组中缺少的列。此外:
- 这将使用
而不是子字符串()
<当模式以非通配符开头时,code>LIKE
可以使用索引,因此使用模式是一个好习惯
- 这将明确提取时间比较的小时数。您还可以在'06:00:00'和'14:00:00'之间执行类似于
的操作(日期和时间为时间)
你错过了组中的fverorerrdesc
。我现在觉得自己很傻,哈哈,很简单,但我想不出来。非常感谢。你帮了我很大的忙。祝你今天愉快。谢谢你,我会考虑你的建议。祝您有个美好的一天。