我有一列名为DateId
的{{1}}列,并将日期显示为int
。我可以使用下面的查询将其转换为日期,但是我只想将其显示为月和年。
我有三列20190626
,DateId
和Customer
,它们都来自同一张表。有很多客户每个月都有多次付款,我想将每个客户每个月的所有付款合并在一起,按月分组。
PayAmount
我得到的是
Select
Convert(Date, Convert(Char(8), DateId), 112) As [Date],
Sum(PayAmount), Customer
from
Pay
Group By
Customer, DateId
我想要什么:
DateId PayAmount Customer
--------------------------------------
2019-06-20 $100 A
2019-06-24 $200 B
2019-04-22 $100 B
2019-03-20 $300 A
2019-04-22 $100 B
2019-06-21 $200 A
2019-06-21 $100 B
答案 0 :(得分:1)
另一个选择是使用隐式转换。在这种情况下,LEFT(DateID,7)
。
示例已更新为INT
Select DateID = stuff(left(DateID,6),5,0,'-')
,[PayAmount] = sum([PayAmount])
,Customer
From YourTable
Group By left(DateID,6),Customer
返回
DateID PayAmount Customer
2019-03 300 A
2019-06 300 A
2019-04 200 B
2019-06 300 B
答案 1 :(得分:0)
似乎您只需要ISO8601样式的前7个字符:
CONVERT(varchar(7),DateId,126)
如果您要保留date
数据类型,则需要将日期“舍入”到月初。一种常见的实现方法是以下获取值和日期“ 0”(1900-01-01
)之间月份差异的方法:
CONVERT(date,DATEADD(MONTH,DATEDIFF(MONTH, 0, DateId),0))
如果随后需要显示格式yyyy-MM
,则可以在表示层中将其设置为格式。
如果您还需要按此分组,则将该表达式添加到GROUP BY
子句中。