Re: [SQL] 如何取得GROUP裡 對應某一欄位值的另一쐠…
※ 引述《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
06/02 11:19, 1F
→
06/02 11:30, , 2F
06/02 11:30, 2F