sql >> データベース >  >> RDS >> Sqlserver

SQL Server 2008のWeeknoを使用して6週間の日曜日のカウントを取得するにはどうすればよいですか?

    条件に一致するデータを取得するために任意の日付値を渡すことができるようにしたい場合は、このタイプのPIVOT 次のような動的SQLソリューションを使用する必要があります:

    DECLARE @cols AS NVARCHAR(MAX),
        @colsRollup AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX),
        @StartDate DateTime,
        @EndDate DateTime
    
    Set @StartDate = '10-08-2012 00:00:00.000'
    Set @EndDate = '11-18-2012 23:59:59.000'
    
    select @cols = STUFF((SELECT ',' + QUOTENAME(WeekEnd) 
                        from
                        (
                          select DatePart(wk, I01.[SPGI01_CREATE_S]) WeekEnd
                          from [SUPER-G].[dbo].[CSPGI01_ASN_ACCURACY]
                          where I01.[SPGI01_CREATE_S] between @StartDate AND @EndDate
                        ) src
                        group by WeekEnd
                        order by WeekEnd desc
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,1,'')
    
    select @colsRollup = STUFF((SELECT ', Sum(' + QUOTENAME(WeekEnd) +') as WeekNo'+Cast(Weekend as varchar(2))
                        from
                        (
                          select DatePart(wk, I01.[SPGI01_CREATE_S]) WeekEnd
                          from [SUPER-G].[dbo].[CSPGI01_ASN_ACCURACY]
                          where I01.[SPGI01_CREATE_S] between @StartDate AND @EndDate
                        ) src
                        group by WeekEnd
                        order by WeekEnd desc
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,1,'')
    
    set @query = '
                 SELECT case when InstanceType is not null then InstanceType else ''Sum'' End InstanceType ,  
                    '[email protected]+',  max(InstanceDescription) AS InstanceDescription
                 FROM
                 (
                   SELECT SPGI01_INSTANCE_TYPE_C as InstanceType,
                        InstanceDescription, ' + @cols + ' 
                   from 
                   (
                      SELECT I01.[SPGI01_INSTANCE_TYPE_C], 
                        DatePart(wk, I01.[SPGI01_CREATE_S]) WeekNo, 
                        DATEADD(DAY, 7 -DATEPART(WEEKDAY,I01.[SPGI01_CREATE_S]),  I01.[SPGI01_CREATE_S]) WeekEnd, 
                        J03.SPGJ03_MSG_TRANSLN_X InstanceDescription  
                      FROM [SUPER-G].[dbo].[CSPGI01_ASN_ACCURACY] I01  
                      INNER JOIN [SUPER-G].[dbo].[CSPGI50_VALID_INSTANCE_TYPE] I50 
                        ON I50.[SPGI50_INSTANCE_TYPE_C] = I01.[SPGI01_INSTANCE_TYPE_C]  
                      LEFT JOIN CSPGJ02_MSG_OBJ J02 
                        ON I50.SPGJ02_MSG_K = J02.SPGJ02_MSG_K  
                      LEFT JOIN CSPGJ03_MSG_TRANSLN J03 
                        ON J02.SPGJ02_MSG_K = J03.SPGJ02_MSG_K  
                      where I50.[SPGA04_RATING_ELEMENT_D] = 1  
                        and I01.[SPGI01_EXCEPTIONED_F] = ''N'' 
                        and I01.[SPGI01_DISPUTED_F] != ''Y''  
                        AND J03.[SPGJ03_LOCALE_C] =  ''en_US''  
                        and I01.[SPGA02_BUSINESS_TYPE_C] = ''PROD'' 
                        and I01.[SPGA03_REGION_C] = ''EU''  
                        and I01.[SPGI01_SUB_BUSINESS_TYPE_C] = ''PRD''
                        and I01.[SPGI01_CREATE_S] between '+ convert(varchar(10), @StartDate, 120)+' AND '+ convert(varchar(10), @EndDate, 120)+'
                  ) x
                  pivot 
                  (
                      count(WeekEnd)
                      for weekno in (' + @cols + ')
                  ) p 
                 ) x1
                 GROUP BY InstanceType WITH ROLLUP '
    
    execute(@query)
    

    注:サンプルデータなどがないため、これはテストされていません。




    1. MicrosoftAccessのヒントとコツパート2–フォーム

    2. 自動化されたクラウドデータベース展開のガイド

    3. php-ユーザーがお気に入りの投稿を行えるようにする

    4. VB.NETを使用して、datagridviewからデータベーステーブルに複数のレコードを挿入します