获取用户在 SQL 中使用特定服务的月数
Getting the counts of the number of months a user has been using a particular service in 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)
编辑:没有意识到它是 month_id
的 COUNT
而不是 DATEDIFF(mm, CONVERT(DATETIME, month_id + ''01'',GETDATE())
。已更新。
我有如下数据:
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)
编辑:没有意识到它是 month_id
的 COUNT
而不是 DATEDIFF(mm, CONVERT(DATETIME, month_id + ''01'',GETDATE())
。已更新。