,[ProductionTasks].[wsID]
,[ptStyleNo]
,[ptStyle]
,[ptAmount]
,[ptDueDate]
,[ptCreatorID]
,[ptModifyID]
,[ptStatus]
,[ptCreationDate]
,Processes.*
,ProductionTaskItems.*
,Count(ProductionTaskItems.ptiID) as ItemCount
FROM [ProductionTasks]
LEFT JOIN ProductionTaskItems
ON [ProductionTasks].ptID=ProductionTaskItems.ptID
LEFT JOIN Processes
ON Processes.pID=ProductionTaskItems.ptID
16 个解决方案
#1
有分组函数时,查询的列必须要包括在聚合函数或者分组里,这是语法规定,oracle和server一样!
建议:把其它没有count的列加上不影响取值的聚合函数,比如说min,max,因为你查出来也是固定的,加上也没影响。或者就把没有count的列写到group by里。
建议:把其它没有count的列加上不影响取值的聚合函数,比如说min,max,因为你查出来也是固定的,加上也没影响。或者就把没有count的列写到group by里。
#2
语法错了,有count后边得有group by 啊
#3
group by 要把非聚合函数以外的字段都列进去。
#4
我试了一下还是不行。具体怎么写还请示例,麻烦了~
#5
帮助文档那么清楚都不看啊
#6
这个很简单 遇到过的就知道 count();改成count 就可以了
#7
SELECT [ProductionTasks].[ptID]
,[ProductionTasks].[wsID]
,[ptStyleNo]
,[ptStyle]
,[ptAmount]
,[ptDueDate]
,[ptCreatorID]
,[ptModifyID]
,[ptStatus]
,[ptCreationDate]
,Processes.*
,ProductionTaskItems.*
,Count(ProductionTaskItems.ptiID) as ItemCount
FROM [ProductionTasks]
LEFT JOIN ProductionTaskItems
ON [ProductionTasks].ptID=ProductionTaskItems.ptID
LEFT JOIN Processes
ON Processes.pID=ProductionTaskItems.ptID
group by [ProductionTasks].[ptID]
,[ProductionTasks].[wsID]
,[ptStyleNo]
,[ptStyle]
,[ptAmount]
,[ptDueDate]
,[ptCreatorID]
,[ptModifyID]
,[ptStatus]
,[ptCreationDate]
,Processes.*
,ProductionTaskItems.*(*都要填满)
,[ProductionTasks].[wsID]
,[ptStyleNo]
,[ptStyle]
,[ptAmount]
,[ptDueDate]
,[ptCreatorID]
,[ptModifyID]
,[ptStatus]
,[ptCreationDate]
,Processes.*
,ProductionTaskItems.*
,Count(ProductionTaskItems.ptiID) as ItemCount
FROM [ProductionTasks]
LEFT JOIN ProductionTaskItems
ON [ProductionTasks].ptID=ProductionTaskItems.ptID
LEFT JOIN Processes
ON Processes.pID=ProductionTaskItems.ptID
group by [ProductionTasks].[ptID]
,[ProductionTasks].[wsID]
,[ptStyleNo]
,[ptStyle]
,[ptAmount]
,[ptDueDate]
,[ptCreatorID]
,[ptModifyID]
,[ptStatus]
,[ptCreationDate]
,Processes.*
,ProductionTaskItems.*(*都要填满)
#8
按7楼的写法,Group By后面写的参数太多了 有没有简化的办法?
#9
先想清楚你要的是什么的count
#10
Count pitID 。 只是这样 我不清楚还要怎么描述 需要清楚些什么
#11
原理:用子查询来代替count()函数,没测,应该行,不过效率会降低,如果数据量小的话问题不大,不要偷懒,group by才是应该的。
SELECT [ProductionTasks].[ptID]
,[ProductionTasks].[wsID]
,[ptStyleNo]
,[ptStyle]
,[ptAmount]
,[ptDueDate]
,[ptCreatorID]
,[ptModifyID]
,[ptStatus]
,[ptCreationDate]
,Processes.*
,ProductionTaskItems.*
,(select Count(ProductionTaskItems.ptiID) FROM [ProductionTasks]
LEFT JOIN ProductionTaskItems
ON [ProductionTasks].ptID=ProductionTaskItems.ptID
LEFT JOIN Processes
ON Processes.pID=ProductionTaskItems.ptID) as ItemCountFROM [ProductionTasks]
LEFT JOIN ProductionTaskItems
ON [ProductionTasks].ptID=ProductionTaskItems.ptID
LEFT JOIN Processes
ON Processes.pID=ProductionTaskItems.ptID
#12
SELECT [ProductionTasks].[ptID]
,[ProductionTasks].[wsID]
,[ptStyleNo]
,[ptStyle]
,[ptAmount]
,[ptDueDate]
,[ptCreatorID]
,[ptModifyID]
,[ptStatus]
,[ptCreationDate]
,Processes.*
,ProductionTaskItems.*
,Count(ProductionTaskItems.ptiID) as ItemCount
FROM [ProductionTasks]
LEFT JOIN ProductionTaskItems
ON [ProductionTasks].ptID=ProductionTaskItems.ptID
LEFT JOIN Processes
ON Processes.pID=ProductionTaskItems.ptID group by ItemCount
#13
运行提示“列名ItemCount无效”
#14
++
#15
你把表结构贴出来,给出测试数据,及想要的结果,不然没法回答你
#16
具体怎么做呢?
#1
有分组函数时,查询的列必须要包括在聚合函数或者分组里,这是语法规定,oracle和server一样!
建议:把其它没有count的列加上不影响取值的聚合函数,比如说min,max,因为你查出来也是固定的,加上也没影响。或者就把没有count的列写到group by里。
建议:把其它没有count的列加上不影响取值的聚合函数,比如说min,max,因为你查出来也是固定的,加上也没影响。或者就把没有count的列写到group by里。
#2
语法错了,有count后边得有group by 啊
#3
group by 要把非聚合函数以外的字段都列进去。
#4
我试了一下还是不行。具体怎么写还请示例,麻烦了~
#5
帮助文档那么清楚都不看啊
#6
这个很简单 遇到过的就知道 count();改成count 就可以了
#7
SELECT [ProductionTasks].[ptID]
,[ProductionTasks].[wsID]
,[ptStyleNo]
,[ptStyle]
,[ptAmount]
,[ptDueDate]
,[ptCreatorID]
,[ptModifyID]
,[ptStatus]
,[ptCreationDate]
,Processes.*
,ProductionTaskItems.*
,Count(ProductionTaskItems.ptiID) as ItemCount
FROM [ProductionTasks]
LEFT JOIN ProductionTaskItems
ON [ProductionTasks].ptID=ProductionTaskItems.ptID
LEFT JOIN Processes
ON Processes.pID=ProductionTaskItems.ptID
group by [ProductionTasks].[ptID]
,[ProductionTasks].[wsID]
,[ptStyleNo]
,[ptStyle]
,[ptAmount]
,[ptDueDate]
,[ptCreatorID]
,[ptModifyID]
,[ptStatus]
,[ptCreationDate]
,Processes.*
,ProductionTaskItems.*(*都要填满)
,[ProductionTasks].[wsID]
,[ptStyleNo]
,[ptStyle]
,[ptAmount]
,[ptDueDate]
,[ptCreatorID]
,[ptModifyID]
,[ptStatus]
,[ptCreationDate]
,Processes.*
,ProductionTaskItems.*
,Count(ProductionTaskItems.ptiID) as ItemCount
FROM [ProductionTasks]
LEFT JOIN ProductionTaskItems
ON [ProductionTasks].ptID=ProductionTaskItems.ptID
LEFT JOIN Processes
ON Processes.pID=ProductionTaskItems.ptID
group by [ProductionTasks].[ptID]
,[ProductionTasks].[wsID]
,[ptStyleNo]
,[ptStyle]
,[ptAmount]
,[ptDueDate]
,[ptCreatorID]
,[ptModifyID]
,[ptStatus]
,[ptCreationDate]
,Processes.*
,ProductionTaskItems.*(*都要填满)
#8
按7楼的写法,Group By后面写的参数太多了 有没有简化的办法?
#9
先想清楚你要的是什么的count
#10
Count pitID 。 只是这样 我不清楚还要怎么描述 需要清楚些什么
#11
原理:用子查询来代替count()函数,没测,应该行,不过效率会降低,如果数据量小的话问题不大,不要偷懒,group by才是应该的。
SELECT [ProductionTasks].[ptID]
,[ProductionTasks].[wsID]
,[ptStyleNo]
,[ptStyle]
,[ptAmount]
,[ptDueDate]
,[ptCreatorID]
,[ptModifyID]
,[ptStatus]
,[ptCreationDate]
,Processes.*
,ProductionTaskItems.*
,(select Count(ProductionTaskItems.ptiID) FROM [ProductionTasks]
LEFT JOIN ProductionTaskItems
ON [ProductionTasks].ptID=ProductionTaskItems.ptID
LEFT JOIN Processes
ON Processes.pID=ProductionTaskItems.ptID) as ItemCountFROM [ProductionTasks]
LEFT JOIN ProductionTaskItems
ON [ProductionTasks].ptID=ProductionTaskItems.ptID
LEFT JOIN Processes
ON Processes.pID=ProductionTaskItems.ptID
#12
SELECT [ProductionTasks].[ptID]
,[ProductionTasks].[wsID]
,[ptStyleNo]
,[ptStyle]
,[ptAmount]
,[ptDueDate]
,[ptCreatorID]
,[ptModifyID]
,[ptStatus]
,[ptCreationDate]
,Processes.*
,ProductionTaskItems.*
,Count(ProductionTaskItems.ptiID) as ItemCount
FROM [ProductionTasks]
LEFT JOIN ProductionTaskItems
ON [ProductionTasks].ptID=ProductionTaskItems.ptID
LEFT JOIN Processes
ON Processes.pID=ProductionTaskItems.ptID group by ItemCount
#13
运行提示“列名ItemCount无效”
#14
++
#15
你把表结构贴出来,给出测试数据,及想要的结果,不然没法回答你
#16
具体怎么做呢?