获取用户在SQL中使用特定服务的月数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取用户在SQL中使用特定服务的月数相关的知识,希望对你有一定的参考价值。
我有如下数据:
user_id month_id service
895 201612 S
262 201612 V
5300 201612 BB
现在可能有一年中使用过多个服务的用户,我想有一个查询给我这个。例如,说895使用S 3个月,BB使用4个月,然后他的最新服务是V.所以:
user_id S BB V
895 3 4 5
我如何在SQL中执行此数据透视和计数,有人可以帮助我吗?
答案
以下是如何动态执行此操作:
DECLARE @Cols AS NVARCHAR(MAX)
,@Query AS NVARCHAR(MAX);
SET @Cols = STUFF((
SELECT DISTINCT ',' + QUOTENAME(service)
FROM YourTable
FOR XML PATH('')
,TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
SET @Query = 'SELECT user_id, ' + @Cols + ' from
(
select user_id
, month_id
, service
from YourTable
) x
pivot
(
COUNT(month_id)
for service in (' + @Cols + ')
) p '
EXECUTE(@Query)
编辑:没有意识到它是COUNT
month_id
而不是DATEDIFF(mm, CONVERT(DATETIME, month_id + ''01'',GETDATE())
。更新。
以上是关于获取用户在SQL中使用特定服务的月数的主要内容,如果未能解决你的问题,请参考以下文章
获取 Javascript 中两 (2) 个日期之间*每年*的月数 [例如:2019 年 8 月 - 2022 年 8 月]