作者retsamsu (haha)
看板Database
标题Re: [SQL ] 请问选取最大值的方法
时间Sun Nov 12 23:30:01 2006
※ 引述《cmccyc (悲惨的生活)》之铭言:
: (针对 SQL 语言的问题,用这个标题。请用 Ctrl+Y 砍掉这行)
: 资料库名称:teradata或 mssql
: 资料库版本:
: 内容/问题描述:
: 我有一个消费table
: ID 餐费 旅行 服饰
: ---------------------------------
: a 500 100 200
: b 100 150 300
: c 100 700 300
: 我想要针对每个人选出主要消费的项目
: ID 消费项目
: ----------------
: a 餐费
: b 服饰
: c 旅行
: 请问要如何写呢
: 谢谢
我的想法可能不是最佳的,但是最直觉的想法,程式部份可能有错,不过大概
就是那个意思了
如果就只有你说的那些table跟栏位的话,那应该可以这样
1. 先SELECT INTO消费table每一个资料的MAX到一个temp table
2. 对那个temp table里面的值回去消费table每个栏位找找,如果有MATCH
的话就把要消费的项目那个table设定成那个column的名字
(如果有一样的话,只有最後一个名字会被记住)
所以大概是这样(写成store procedure)
DECLARE @temptable TABLE
{
ID %DATATYPES%,
MAXVALUE %DATATYPES%
}
其中%DATATYPES%要根据你的消费table而定
然後
SELECT ID, MAX(餐费,旅行,服饰,...) AS MAXVALUE INTO temptable FROM 消费
这样temptable应该有每个ID对应之最大值
然後(假设你的主要消费的项目table已经存在且有ID)
UPDATE 主要消费的项目 SET 消费项目='餐费' WHERE ID IN (
SELECT 消费.ID FROM 消费, temptable WHEER 消费.ID=temptable.ID AND
消费.餐费 = temptable.MAXVALUE)
这样一来最大值为餐费的在主要消费的项目table就会被改成餐费
所以依样画葫芦
UPDATE 主要消费的项目 SET 消费项目='旅行' WHERE ID IN (
SELECT 消费.ID FROM 消费, temptable WHEER 消费.ID=temptable.ID AND
消费.旅行 = temptable.MAXVALUE)
UPDATE 主要消费的项目 SET 消费项目='服饰' WHERE ID IN (
SELECT 消费.ID FROM 消费, temptable WHEER 消费.ID=temptable.ID AND
消费.服饰 = temptable.MAXVALUE)
...
大概就是这样,code可能有错,不过可以以这边出发想看看~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.209.4
※ 编辑: retsamsu 来自: 140.113.209.4 (11/12 23:34)