复杂的 SQL 查询或查询
Posted
技术标签:
【中文标题】复杂的 SQL 查询或查询【英文标题】:Complex SQL query or queries 【发布时间】:2016-04-29 22:18:33 【问题描述】:我查看了其他示例,但我对 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
这可以在单独的查询中,但我需要“First”来等于使用特定名称的第一个月,因此例如,每行带有 fred 的第一个字段中都会包含 JAN2013。我需要 'Last' 列等于每个名称的最后一条记录的月份,最后我需要 'total' 列是每个名称的所有计数的总和,因此在有 fred 的每一行中,总数将在此示例数据中为 10。这超出了我的想象。你们中的哪一位可以提供帮助吗?
【问题讨论】:
你需要自己努力解决这个问题。 我很确定您的导师希望看到您的作品而不是我们的作品。如果您无法开始作业,请向教师寻求帮助。他们获得报酬是为了向您提供完成任务所需的知识,但显然他们还没有这样做。 这实际上不适合上课。这是针对现实世界的问题。我只是没有时间在周末掌握 SQL 来为我的老板转换这些数据 我认为您至少可以解决最简单的最后一部分,即按名称对计数列求和。如果您这样做,将更愿意提供其余的解决方案 虽然您认为人们没有帮助,但更多的是您的问题不适合该网站。最好将其发布在传统论坛上,阅读发布指南了解为什么会这样。 【参考方案1】:这很粗糙,但应该可以解决问题。我稍微重命名了你的字段,因为你使用了一堆“保留”的 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
【讨论】:
问题被标记为访问,我想你可能错过了,因为它使用了访问中不存在的功能,只有 SQL 服务器以上是关于复杂的 SQL 查询或查询的主要内容,如果未能解决你的问题,请参考以下文章
具有 group by 和/或 distinct 和 pivot 的复杂 SQL Server 查询