作者KenZ ()
看板Database
标题Re: [SQL] 如何取得GROUP里 对应某一栏位值的另一쐠…
时间Tue Jun 1 23:26:45 2010
※ 引述《Linethan (认真魔人)》之铭言:
: 我实在不太知道该怎麽下这篇文章的标题才对>"< 问题如下:
: 我的资料表(称之为data)里有七个栏位:
: 代号 名称 日期 A B C D
: 我需要以代号跟名称来分群,以日期作为条件式,A B C要取SUM
: 原本应该很简单的写成: (写在microsoft query里)
: Select data.代号, data.名称, sum(data.A), sum(data.B),
: sum(data.c)
: From data
: WHERE data.日期>='20100501' and data.日期<='20100531'
: GROUP BY data.代号, data.名称
: 以上可以顺利执行,不过 我现在想要加入D栏位
: 可是我是要在该群组里 对应最大日期的D栏位的值
: 例如说, 在代号=100 名称=XYZ的GROUP里有三笔资料:
: 代号 名称 日期 A B C D
: 100 XYZ 20100503 1 1 1 9
: 100 XYZ 20100509 1 1 1 3
: 100 XYZ 20100522 1 1 1 7
: 我希望跑出来的资料结果是:
: 100 XYZ 3 3 3 7
: (A B C皆取sum故值为3, D我要取对应最大日期的那个值 故为7)
: 我无法对D下max函数 因为我要取的值不一定是最大值
: 我试过用case条件式:
: SUM(CASE WHEN data.日期=max(data.日期) THEN data.D ELSE 0 END)
: 但是无法执行 似乎是因为汇总函数里不能再放入汇总函数
: 可是如果不取SUM的话 CASE WHEN那一句又不是汇总函数 不能用在select里面
: 有高手可以教教我 我该怎麽写比较好吗??>"<
这样看看行不行,利用子查询
SELECT data.代号
, data.名称
, SUM(data.A)
, SUM(data.B)
, SUM(data.C)
, (
SELECT TOP 1 s_data.D
FROM data AS s_data
WHERE s_data.代号 = data.代号 AND s_data.名称 = data.名称
AND s_data.日期 BETWEEN '20100501' AND '20100531'
ORDER BY s_data.日期 DESC
)
FROM data
WHERE data.日期 BETWEEN '20100501' AND '20100531'
GROUP BY data.代号, data.名称
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.254.201.37
※ 编辑: KenZ 来自: 111.254.201.37 (06/01 23:28)
1F:→ fantasyj:记得select上的subquery无法与group一起使用.. 06/02 11:19
2F:→ fantasyj:error, 我记错了, 请忽略我上面那句话 囧 06/02 11:30