0

我有如下数据:

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 中执行此枢轴和计数,有人可以帮助我吗?

4

1 回答 1

1

以下是动态执行此操作的方法:

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)

编辑:没有意识到它是COUNTofmonth_id而不是DATEDIFF(mm, CONVERT(DATETIME, month_id + ''01'',GETDATE()). 更新。

于 2017-12-20T14:58:33.137 回答