Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर 2008 में वीकनो का उपयोग करके छह सप्ताह की रविवार की गिनती कैसे प्राप्त करें?

यदि आप अपने मानदंडों को पूरा करने वाला डेटा प्राप्त करने के लिए किसी भी दिनांक मान में पास होने में सक्षम होना चाहते हैं, तो इस प्रकार के 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में डेटाबेस की आईडी वापस करने के लिए DB_ID () का उपयोग करें

  2. SQL सर्वर में एक दृश्य को एन्क्रिप्ट कैसे करें

  3. कैसे पता करें कि कौन से कॉलम में कोई डेटा नहीं है (सभी मान NULL हैं)?

  4. चेक के साथ बाधा जोड़ें और उसके बाद चेक बाधा बनाम बाधा जोड़ें

  5. पहले से मौजूद तालिका के लिए कॉलम पर अद्वितीय बाधा कैसे बनाएं - SQL सर्वर / TSQL ट्यूटोरियल भाग 97