Re: [SQL] 如何取得GROUP裡 對應某一欄位值的另一쐠…

看板Database作者時間15年前 (2010/06/01 23:26), 編輯推噓0(002)
留言2則, 1人參與, 最新討論串1/1
※ 引述《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)

06/02 11:19, , 1F
記得select上的subquery無法與group一起使用..
06/02 11:19, 1F

06/02 11:30, , 2F
error, 我記錯了, 請忽略我上面那句話 囧
06/02 11:30, 2F
文章代碼(AID): #1C1IQuh4 (Database)