【发布时间】:2010-11-01 20:04:27
【问题描述】:
我在 Microsoft SQL Server 2005 中工作,需要对周二有资格参加我们 50+ 锦标赛的球员进行分析 --> 要获得资格,他们需要在周一或周二下午 2 点之前的那一周获得 5+ 分,并且积分不是累积的(必须在周一或周二下午 2 点之前获得至少 5 分)。我使用的代码如下,但到目前为止只包含特定星期一和星期二的日期范围。我需要 2 个月内的所有星期一和星期二。我对此很陌生(有点像作为一项额外的职责扔在我的腿上,所以我必须在飞行中学习)......
到目前为止,正如我所说,我已经能够靠自己成功获得所需的所有信息,但它仅针对 1 周。到目前为止,我在网上找到的所有内容都比我能解释的更加混乱,没有人引用我提供的代码,而是给了我无法使用的全新代码......
SELECT
dbo.CombinedPts.Account, dbo.CombinedPts.FirstName,
dbo.CombinedPts.LastName,
ISNULL(dbo.CombinedPts.EGSPts, 0) AS EGS,
ISNULL(dbo.CombinedPts.IRPts, 0) AS IR,
DATENAME(dw, dbo.CombinedPts.Date) AS WkDay,
DATEDIFF(YY, dbo.PlayerMaster.Birthdate, {fn current_date()}) - CASE WHEN (MONTH(dbo.PlayerMaster.Birthdate)=MONTH({fn current_date()}) AND DAY(dbo.PlayerMaster.Birthdate) > DAY({fn current_date()}) OR MONTH (dbo.PlayerMaster.Birthdate) > MONTH ({fn current_date()})) THEN 1 ELSE 0 END AS Age
FROM
dbo.CombinedPts, dbo.PlayerMaster
WHERE
(DATEDIFF(YY, dbo.PlayerMaster.Birthdate, {fn current_date()}) >= 50)
AND (dbo.CombinedPts.EGSPts >= 5 OR dbo.CombinedPts.IRPts >= 5)
AND (dbo.CombinedPts.Account = dbo.PlayerMaster.Account)
AND (Date BETWEEN '10/11/2010 00:00:00' AND '10/11/2010 13:59:59' OR Date BETWEEN '10/12/2010 00:00:00' AND '10/12/2010 13:59:59')
AND (DATEPART(dw, dbo.CombinedPts.Date) = 2 OR DATEPART(dw, dbo.CombinedPts.Date) = 3)
GROUP BY
dbo.CombinedPts.Account,
dbo.CombinedPts.FirstName,
dbo.CombinedPts.LastName,
DATENAME(dw, dbo.CombinedPts.Date),
dbo.CombinedPts.EGSPts,
dbo.CombinedPts.IRPts,
dbo.PlayerMaster.Birthdate
ORDER BY
dbo.CombinedPts.Account
附带说明一下,在我们的 SQL Server 2005 中,我没有创建子查询的权限(我已经成为 UNION ALL 的狂热用户 --> 到目前为止,这在查询中证明是无用的)我也没有权限生成表,所以我所做的一切都必须在一个查询中......到目前为止,所有有意义的帮助都是使用表和子查询。
【问题讨论】:
-
dbo.CombinedPts、dbo.PlayerMaster可以加入哪个栏目?您是否在 Management Studio 中运行它?
-
我不知道子查询可能会被权限拒绝...您确定这是权限错误而不是子查询中的语法错误吗?
-
我们在网络上运行它,并且它以某种方式设置为只有一个人(我们的 IT 主管)可以编辑任何内容,即我无法在 SQL Server 2005 中保存任何内容,因此也无法创建子查询,因为它不会不要让我链接它们,因为它们未保存。他一直告诉我他会修复它,这样我就可以使用视图和设计(它也不会让我这样做),所以我可以保存表和子查询,但实际上不会对数据库进行更改,但这还没有发生.
标签: sql-server date sql-server-2005