复杂的SQL查询或查询
问题描述:
我查看了其他示例,但我不太了解SQL以适应我的需求。我有一个表,看起来像这样:复杂的SQL查询或查询
ID Month NAME COUNT First LAST TOTAL
------------------------------------------------------
1 JAN2013 fred 4
2 MAR2013 fred 5
3 APR2014 fred 1
4 JAN2013 Tom 6
5 MAR2014 Tom 1
6 APR2014 Tom 1
这可能是单独的查询,但我需要“第一”等于第一个月,一个特定名称使用,因此与弗雷德每一行必须JAN2013中例如第一场。我需要“最后”列等于每个姓名的最后一个记录的月份,最后我需要“总计”列为每个姓名的所有计数的总和,因此在每一行中,在这个示例数据中是10,这是我的头,你们能协助吗?
答
这是粗略的,但应该做的伎俩我重命名你的领域有点是因为你使用了一堆“保留”sql字那是不好的形式。
;WITH cte as
(
Select
[NAME]
,[nmCOUNT]
,ROW_NUMBER() over (partition by NAME order by txtMONTH ASC) as 'FirstMonth'
,ROW_NUMBER() over (partition by NAME order by txtMONTH DESC) as 'LastMonth'
,SUM([nmCOUNT]) as 'TotNameCount'
From Table
Group by NAME, [nmCOUNT]
)
,cteFirst as
(
Select
NAME
,[nmCOUNT]
,[TotNameCount]
,[txtMONTH] as 'ansFirst'
From cte
Where FirstMonth = 1
)
,cteLast as
(
Select
NAME
,[txtMONTH] as 'ansLast'
From cte
Where LastMonth = 1
Select c.NAME, c.nmCount, c.ansFirst, l.ansLast, c.TotNameCount
From cteFirst c
LEFT JOIN cteLast l on c.NAME = l.NAME
+0
这个问题被标记为访问,我想你可能错过了,因为这使用访问中不存在的函数,只有SQL服务器 – SWa
你需要表现出一定的努力来解决这个自己。 – pquest
我敢肯定你的老师希望看到你的工作,不是我们的。如果你不能得到你的作业开始,请教师寻求帮助,他们正在为你提供知识必须完成你的任务,显然他们还没有完成任务。 –
这实际上并不适用于课堂。这是为了一个现实世界的问题。我只是没有时间在周末掌握SQL来为我的老板录制这些数据 –