iT邦幫忙

1

MSSQL如何將相同天數的數量與金額加總

TABLE有四個欄位 "商品代碼","個數", "金額","販售日期"

商品代碼有四種以上,
販售日期有相同天與不同天
※需要呈現的結果:
(1) 銷售日期的時間需要去掉,只保留年月日,像是"2015/01/13"
(2) 商品代碼相同且需要同一天才可以將數量與金額總和
(3) 可以考慮到多個商品代碼

我的測試檔案https://drive.google.com/file/d/1j7lskVBtk8sO2nGTWhchBTCm65ZPGw2H/view?usp=sharing

提供的內容:
1

目前我的語法會出現無法相同1天合併,以及無法將同1天的數量和金額都加總,
提供我目前寫的語法:

select
COM_D2.商品代碼,
sum(COM_D2.個數) as 每日單件商品數量總和,
sum(COM_D2.金額) as 每日單件商品金額總和,
convert(varchar(10), convert(datetime, COM_D2.販售日期, 111), 111) as 日期
from COM_D2
group by COM.D2, COM_D2.販售日期
order by COM.D2, COM_D2.販售日期

真正需要的結果:
2

請問如何改善查詢結果的方式
謝謝

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
3
石頭
iT邦高手 1 級 ‧ 2019-08-14 22:58:42
最佳解答

如果妳的COM_D2.販售日期欄位是datetime型別,可以嘗試使用CAST來轉換成datetime.

另外再gorup by也是使用CAST(COM_D2.販售日期 AS DATE)而不是COM_D2.販售日期,因為你group by COM_D2.販售日期的分組會包含 時:分:秒

select
COM_D2.商品代碼,
sum(COM_D2.個數) as 每日單件商品數量總和,
sum(COM_D2.金額) as 每日單件商品金額總和,
CAST(COM_D2.販售日期 AS DATE) as 日期
from COM_D2
group by COM.D2, CAST(COM_D2.販售日期 AS DATE) 
order by COM.D2, CAST(COM_D2.販售日期 AS DATE) 
0
allenlwh
iT邦高手 1 級 ‧ 2019-08-15 08:14:28

Group by COM_D2.販售日期時,沒有先convert成 yyyy/mm/dd,
就會連同時分秒一起Group by,所以沒有辦法取回你想要的

select
COM_D2.商品代碼,
sum(COM_D2.個數) as 每日單件商品數量總和,
sum(COM_D2.金額) as 每日單件商品金額總和,
convert(varchar(10), convert(datetime, COM_D2.販售日期), 111) as 日期
from COM_D2
group by COM.D2, convert(varchar(10), convert(datetime, COM_D2.販售日期), 111)
order by COM.D2, convert(varchar(10), convert(datetime, COM_D2.販售日期), 111)
0
rogeryao
iT邦大師 1 級 ‧ 2019-08-15 14:44:12
select a1 as '商品代碼',sum(a2) as '個數' ,sum(a3) as '金額',
CONVERT(varchar(12), convert(date,a4), 111) as '銷售日期'
from COM_D2
where 1=1
group by a1,CONVERT(varchar(12), convert(date,a4), 111)
order by a1,CONVERT(varchar(12), convert(date,a4), 111)

Demo :
https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=90e61696a395afd85f5b435b6c249b2a

where 1=1是什麼?

rogeryao iT邦大師 1 級 ‧ 2019-08-15 19:27:46 檢舉

沒啥特別意義, 習慣性寫法 , 組合 sql 指令較方便;
where 1=1 後面通常是條件式 , 接 and 或是 or .

0
qpowjohn
iT邦新手 4 級 ‧ 2019-08-16 11:08:46
select t.商品代碼, sum(t.每日單件商品數量總和), sum(t.每日單件商品金額總和), t.日期 from 
(
select
COM_D2.商品代碼,
COM_D2.個數 as 每日單件商品數量總和,
COM_D2.金額 as 每日單件商品金額總和,
convert(varchar(10), convert(datetime, COM_D2.販售日期, 111), 102) as 日期
from COM_D2
) t
group by t.日期, t.商品代碼
order by t.日期 asc
0
neil978
iT邦新手 5 級 ‧ 2019-08-20 15:53:25

請問MySQL也有類似的語法嗎??
謝謝

我要發表回答

立即登入回答