select 语句的条件如何过滤的?

yumanqing 2008-10-31 04:55:14
如下的SQL语句:

SELECT rdr.CusCode,
sum(case when rdr.cVouchType='430' AND rdr.cWhCode ='001' AND rdr.iDate>='2008-01-01' then rds.iQuantity else 0 end) as InQty,
sum(case when rdr.cVouchType='430' AND rdr.cWhCode ='001' AND rdr.iDate>='2008-01-01' then rds.Weight else 0 end) as InWeight
FROM RdRecord rdr
LEFT JOIN RdRecords rds ON rdr.[ID]=rds.[ID]
WHERE rdr.cWhCode ='001' AND rdr.iDate>='2008-01-01'
GROUP BY rdr.CusCode

WHERE 中的条件和Case中的条件过滤的先后顺序是怎么样的,我感觉不要WHERE语句也可以,而实际不行,原语句比这复杂的多,
且每个CASE中的条件不一样,如果WHERE 和 Case中的条件不一致究竟是怎么过滤的。谢谢!
...全文
132 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
czx33859066 2008-11-01
  • 打赏
  • 举报
回复
加where 的SQL性能比没加的还是差别挺大的
fcuandy 2008-11-01
  • 打赏
  • 举报
回复
从性能上海兄说过了。

从功能上来说,根本就不一样,
加了where和不加where产生的行数都不一定相等,又何来不加where 也可以呢 ?
「已注销」 2008-11-01
  • 打赏
  • 举报
回复
既然你WHERE语句中已经指定了条件,就不要用CASE语句了,但是SUM的时候要把为空的语句给去掉,提高一下语句性能
「已注销」 2008-11-01
  • 打赏
  • 举报
回复
--这个是用友的数据库,
--应该这样写
SELECT rdr.CusCode,
sum(ISNULL(rds.iQuantity,0)) as InQty,
sum(ISNULL(rds.Weight,0)) as InWeight
FROM RdRecord rdr
INNER JOIN RdRecords rds ON rdr.[ID]=rds.[ID] AND rdr.cWhCode ='001' AND rdr.iDate>='2008-01-01' AND rdr.cVouchType='430'
GROUP BY rdr.CusCode
dawugui 2008-10-31
  • 打赏
  • 举报
回复
先where,然后再case.

不要where是不行的.

你的case中rdr.cWhCode ='001' AND rdr.iDate>='2008-01-01' 可以不要,直接放在where条件中即可.
ChinaJiaBing 2008-10-31
  • 打赏
  • 举报
回复

先执行的是,where->group by->case
csdyyr 2008-10-31
  • 打赏
  • 举报
回复
先过滤where,后过滤case
Yang_ 2008-10-31
  • 打赏
  • 举报
回复
从性能角度
WHERE 部分宁可多余也不要不足
水族杰纶 2008-10-31
  • 打赏
  • 举报
回复
set showplan_text on
go
SELECT rdr.CusCode,
sum(case when rdr.cVouchType='430' AND rdr.cWhCode ='001' AND rdr.iDate>='2008-01-01' then rds.iQuantity else 0 end) as InQty,
sum(case when rdr.cVouchType='430' AND rdr.cWhCode ='001' AND rdr.iDate>='2008-01-01' then rds.Weight else 0 end) as InWeight
FROM RdRecord rdr
LEFT JOIN RdRecords rds ON rdr.[ID]=rds.[ID]
WHERE rdr.cWhCode ='001' AND rdr.iDate>='2008-01-01'
GROUP BY rdr.CusCode
hyde100 2008-10-31
  • 打赏
  • 举报
回复
先where
符合where的再参与计算

34,576

社区成员

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

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