之前沒有提供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)