作者vipin (Vipin)
看板Database
标题Re: [SQL ] 请问数值连续增加
时间Fri May 9 11:42:31 2008
之前没有提供DDL, 懒得做LAB...所以写错一些...
原PO的环境是SQL SERVER, 且想在T-SQL做?
我没有相同环境, 只能用ORACLE方式做个意思参考, 相信SQL SERVER也有类似做法
1.查出鸡排业绩提升的店
SELECT * FROM
(
SELECT store_id,
SUM(DECODE(month, 1, chickenpie,0)) m1,
SUM(DECODE(month, 2, chickenpie,0)) m2,
SUM(DECODE(month,3, chickenpie,0)) m3
FROM store
GROUP BY store_id
)
WHERE m3 > m2
AND m2 > m1
2.查出鸡排业绩衰退的店
SELECT * FROM
(
SELECT store_id,
SUM(DECODE(month, 1, chickenpie,0)) m1,
SUM(DECODE(month, 2, chickenpie,0)) m2,
SUM(DECODE(month,3, chickenpie,0)) m3
FROM store
GROUP BY store_id
)
WHERE m3 < m2
AND m2 < m1
DDL:
CREATE TABLE "STORE"
( "STORE_ID" VARCHAR2(20 BYTE),
"MONTH" VARCHAR2(20 BYTE),
"BUGGER" NUMBER(3,0),
"CHICKENPIE" NUMBER(3,0);
DATA:
Insert into STORE (STORE_ID,MONTH,BUGGER,CHICKENPIE) values ('A','1',10,12);
Insert into STORE (STORE_ID,MONTH,BUGGER,CHICKENPIE) values ('A','2',11,11);
Insert into STORE (STORE_ID,MONTH,BUGGER,CHICKENPIE) values ('A','3',12,10);
Insert into STORE (STORE_ID,MONTH,BUGGER,CHICKENPIE) values ('B','1',12,13);
Insert into STORE (STORE_ID,MONTH,BUGGER,CHICKENPIE) values ('B','2',11,14);
Insert into STORE (STORE_ID,MONTH,BUGGER,CHICKENPIE) values ('B','3',10,15);
这些都是写死的CODE
要活就要在client端程式去做就好
※ 引述《diamondking (迷惘)》之铭言:
: ※ 引述《idleidle (哎躱哎躱)》之铭言:
: : 资料表如下
: : 分店 月份 汉堡业绩 鸡排业绩
: : A 1 10 12
: : A 2 11 11
: : A 3 12 10
: : B 1 12 13
: : B 2 11 14
: : B 3 10 15
: : C
: : 至
: : Z
: : 共有A~Z 26个分店。
: : 老板要求
: : 他想知道那分店,在1,2,3月份的汉堡业绩皆成长,即3>2>1月份。
: : 也想知道那分店,业绩皆衰退,如A分店鸡排。
: : 有办法用T-SQL写出来吗?
: : 目前是先捞出A店资料,再一笔一笔做判断
: : 不过资料量一大就会变很慢
: : 想利用SQL 加速
: : 谢谢
: : 另外有任何书籍有讨论类似的问题吗?
: : 感恩
: 给你一个提示,业绩通通是成长,反过来说,就是
: "不存在" (月份较小,但业绩却较大)
: 因此你可以建立一个子查询,是自己join自己(分别取名为a,b两表),
: 且where a.月份<b.月份 and a.业绩>b.业绩 and a.分店代号=b.分店代号,
: 这样可以查出所有月份较小但业绩却较高的分店。
: 最後外圈包一个主查询,where 分店代号 not in (刚刚的子查询)
: 完成了…
: (本来只是要小小提示一下,结果怎麽好像全讲完了orz)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.250.190.113
※ 编辑: vipin 来自: 60.250.190.113 (05/09 13:58)