【发布时间】:2011-07-29 06:15:02
【问题描述】:
这是我用了将近 20 分钟的查询。请建议我进行更改以提高性能
SELECT DISTINCT
CONVERT(varchar(10),x.notice_date,120) Date,
Y.branch_name,
count(case when x.status='broken' and x.branch_name=y.branch_name then 1 end)
Broken,
count(case when x.type='Lote' and x.branch_name=y.branch_name then 1 end)
Lost,
( SELECT COUNT(A.car_no)
FROM DB2.dbo.z_mat A
WHERE DateAdd(Day, DateDiff(Day, 0,a.notice_date), 0)
= DateAdd(Day, DateDiff(Day, 0,x.notice_date), 0)
AND a.branch_name=y.branch_name
) mat,
( SELECT COUNT(B.car_no)
FROM DB2.dbo.z_cat B
WHERE DateAdd(Day, DateDiff(Day, 0,b.notice_date), 0)
= DateAdd(Day, DateDiff(Day, 0,x.notice_date), 0)
AND b.branch_name=y.branch_name
) cat,
( SELECT COUNT(C.car_no)
FROM DB2.dbo.z_pat C
WHERE DateAdd(Day, DateDiff(Day, 0,c.notice_date), 0)
= DateAdd(Day, DateDiff(Day, 0,x.notice_date), 0)
AND c.branch_name=y.branch_name
) pat
FROM DB1.dbo.Cars x
, DB2.dbo.Branch Y
WHERE DateAdd(Day, DateDiff(Day, 0,x.notice_date), 0)
> '2011-01-01'
GROUP BY CONVERT(varchar(10),x.notice_date,120)
, DateAdd(Day, DateDiff(Day, 0,x.notice_date), 0)
, y.branch_name
【问题讨论】:
-
请格式化查询,使其更具可读性。尝试将外部数据获取到本地临时文件中。进行所有计算之前的表格。
-
@ARB:此时您应该已经学会了如何格式化您的帖子。它们已经被其他人不止一次地编辑过,以提高它们的表现力,为了你的利益不亚于他人的利益。我认为现在是你自己开始这样做的时候了。
-
对不起格式错误..我试图格式化但我没有..所以我想有人得到了格式化的工作..从现在开始我会做正确的格式.. @西瓦。我正在使用 sql server 2008
-
你能解释一下你想用所有的 DateAdd(Day, DateDiff(Day, 0,x.notice_date), 0) 代码实现什么吗?
-
该列实际上是日期时间..所以我将日期时间设为 2011-01-01 00:00:00.. 所以所有相同日期的日期时间都属于单一日期类别
标签: sql performance sql-server-2008