谁能帮我解释一下这段sql语句?

mynamelj 2006-06-27 01:56:44
SELECT Orders_D.ID,
qty = sum(mo.prod_qty - mo.defect_qty),
ship_qty = sum(mo.out_qty),
ship_date = max(mo.ship_date)
FROM Orders,
Orders_D,
MO
WHERE ( Orders_D.Order_ID = Orders.ID ) and
( MO.Ord_DID = Orders_D.ID ) and
( ( Orders_D.Status = 0 ) AND
( Orders.Cmp = 0 ) )
GROUP BY Orders_D.ID
...全文
156 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hellowork 2006-06-27
  • 打赏
  • 举报
回复
抱歉,误人子弟!
更正:
Orders_D.ID mo.out_qty
1 17
2 32
mynamelj 2006-06-27
  • 打赏
  • 举报
回复
hellowork() ( ) 信誉:100
---------------------------------
非常感谢!!!
hellowork 2006-06-27
  • 打赏
  • 举报
回复
正文语句的意思是对符合条件的mo表中的指定行,按Orders_D表中的ID列分组计算指定列的和以及最大值.比如:
Orders_D.ID mo.out_qty
1 5
2 10
1 12
2 22
结果就是:
Orders_D.ID mo.out_qty
1 17
2 22
当SELECT字句中聚合计算列与非聚合计算列混合存在时,必须为非聚合计算列指定GROUP BY字句,以指定分组的顺序,如正文中SELECT字句中出现了Orders_D.ID列,必须在GROUP BY字句中指定该列.
如果去掉GROUP BY,则必须也去掉SELECT语句中出现的所有非聚合计算列,得到的结果是mo表中符合条件的所有行的指定列的聚合函数值.
注意:SELECT语句中出现的非聚合列的数量和名称必须与GROUP BY字句中的数量和名称相同,它们在ORDER BY字句中出现的顺序决定了组中组的顺序.例如:
select A,B,sum(C) from t group by A,B
select A,B,sum(C) from t group by B,A
它们的含义是不同的.
LouisXIV 2006-06-27
  • 打赏
  • 举报
回复
由于含有非聚集列Orders_D.ID

所以去掉Group By无法执行

如果要去掉Group By

Select中Orders_D.ID要一并除掉
jetdw 2006-06-27
  • 打赏
  • 举报
回复
上面说的很仔细,支持一下!
78984598 2006-06-27
  • 打赏
  • 举报
回复
去掉GROUP BY Orders_D.ID是不能执行的,因为这条SQL语句有聚集函数。
mynamelj 2006-06-27
  • 打赏
  • 举报
回复
能不能说详细点特别是:
qty = sum(mo.prod_qty - mo.defect_qty),
ship_qty = sum(mo.out_qty),
ship_date = max(mo.ship_date)

为什么我去掉GROUP BY Orders_D.ID这一行就行能执行?
hellowork 2006-06-27
  • 打赏
  • 举报
回复
表内联接(inner join)的一种替代形式.
LouisXIV 2006-06-27
  • 打赏
  • 举报
回复
3个表之间通过ID进行关联

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧