复杂的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,这是我的头,你们能协助吗?

+0

你需要表现出一定的努力来解决这个自己。 – pquest

+0

我敢肯定你的老师希望看到你的工作,不是我们的。如果你不能得到你的作业开始,请教师寻求帮助,他们正在为你提供知识必须完成你的任务,显然他们还没有完成任务。 –

+0

这实际上并不适用于课堂。这是为了一个现实世界的问题。我只是没有时间在周末掌握SQL来为我的老板录制这些数据 –

这是粗略的,但应该做的伎俩我重命名你的领域有点是因为你使用了一堆“保留”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