具有多个标头的SQL Pivot

时间:2018-11-15 03:20:10

标签: pivot

我正在使用SP中的多个标头进行数据透视。 我将日期分为3列(WLQ,TQ和FLQ)。

进行透视后的问题是该列按组显示。 示例输出为:(12-4_WLQ, 13-4_WLQ, 14-4_WLQ, 12-4_TQ, 13-4_TQ, 14-4_TQ, 12-4_FLQ, 13-4_FLQ, 14-4_FLQ)

我要如何按日期显示输出,例如:(12-4_WLQ, 12-4_TQ, 12-4_FLQ, 13-4_WLQ, 13-4_TQ, 13-4_FLQ, 14-4_WFLQ, 14-4_TQ, 14-4_FLQ)

这是我的代码:

ALTER PROCEDURE [dbo].[EXEC_DATETM_SP]

AS

BEGIN

SET NOCOUNT ON;

DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
    DECLARE @startdt DATETIME, @enddt DATETIME, @QueryCol NVARCHAR(MAX), @QueryCol2 NVARCHAR(MAX), @QueryCol3 NVARCHAR(MAX)
SET @startdt = '04/12/2018'
SET @enddt = '04/17/2018'

WHILE @startdt <= @enddt
BEGIN
    SET @QueryCol=isnull(@QueryCol, '')+QUOTENAME(convert(nvarchar(20), @startdt, 101)+'_WLQ')+(CASE WHEN @startdt<>@enddt THEN ',' ELSE '' END)
    SET @QueryCol2=isnull(@QueryCol2, '')+QUOTENAME(convert(nvarchar(20), @startdt, 101)+'_TQ')+(CASE WHEN @startdt<>@enddt THEN ',' ELSE '' END)
    SET @QueryCol3=isnull(@QueryCol3, '')+QUOTENAME(convert(nvarchar(20), @startdt, 101)+'_FLQ')+(CASE WHEN @startdt<>@enddt THEN ',' ELSE '' END)

    SET @startdt =  @startdt + 1
END
    set @DynamicPivotQuery=
    N'
    select 
    [KT_HYOU_NAME],
    [KT_KEIRO_NAME],
    [KT_GUN_NO],
    [TUKA_JUN],
    [KT_CD],
    [SG_KU_CD],
    ' + @QueryCol + ',
    ' + @QueryCol2 + ',
    ' + @QueryCol3 + '
        from 
    (
        SELECT * FROM V_DATEBYWLQ
    )s
    pivot (sum (WORK_LOT_QTY) for 
    [EXEC_DATETMM] in ('+@QueryCol+')) as AvgWidgetsPerDayPerEmp
    pivot (sum (TARGET_QTY) for 
    [EXEC_DATETMN] in ('+@QueryCol2+')) as AvgWidgetsPerDayPerEmp2
    pivot (sum (FIN_LOT_QTY) for 
    [EXEC_DATETMO] in ('+@QueryCol3+')) as AvgWidgetsPerDayPerEmp3
    '
EXEC sp_executesql @DynamicPivotQuery
END
GO

0 个答案:

没有答案