看板 Database 關於我們 聯絡資訊
之前沒有提供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)