复杂的SQL查询或查询

时间:2016-04-29 22:18:34

标签: sql ms-access

我查看了其他示例,但我对SQL的了解不足以使其适应我的需求。我有一张看起来像这样的表:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

这可能是单独的查询,但我需要&#39; First&#39;等于使用特定名称的第一个月,因此每个具有fred的行在第一个字段中将具有JAN2013。我需要&#39; Last&#34;列等于每个姓名的最后一个记录的月份,最后我需要总计&#39; column是每个名称的所有计数的总和,因此在fred的每一行中,此示例数据中的总数将为10。这是我的头脑。你们其中一个可以协助吗?

1 个答案:

答案 0 :(得分:-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