मान लीजिए मेरे पास निम्न तालिका है:

Client  ContainerID   Year  Month   NumberOfViews
bar     116025        2019    1         2
dandy   2753          2020    1         3
dandy   2753          2020    2         2
dandy   4247          2020    1         1
demo    20037         2019    1         1

मैं इसे निम्न तालिका में बदलना चाहता हूं:

Client  ContainerID   Jan-2019  Jan-2020 Feb-2020   
bar     116025        2         0        0
dandy   2753          0         3        2
dandy   4247          0         1        0
demo    20037         1         0        0

अर्थ: वर्ष + माह सेल पंक्तियाँ कॉलम में बदल जाती हैं और 'NumberOfViews' का मान सही दिनांक कॉलम में चला जाता है।

0
user4675862 5 अप्रैल 2020, 11:29
आपका डेटाबेस नाम क्या है?
 – 
mkRabbani
5 अप्रैल 2020, 11:46
[डीबीओ]। [लॉगरिकॉर्ड विवरण]
 – 
user4675862
5 अप्रैल 2020, 11:47
मेरा मतलब है आपका RDBMS :) MSSQL या MySQL या Oracle...?
 – 
mkRabbani
5 अप्रैल 2020, 11:48
ओह, ठीक :) एमएसएसक्यूएल।
 – 
user4675862
5 अप्रैल 2020, 11:53
 – 
user70
5 अप्रैल 2020, 12:08

2 जवाब

तुम वहाँ जाओ।

अपना टेबल नाम बदलें:

WITH cte AS(
SELECT Client
      ,ContainerId
      ,NumberOfViews
      ,FORMAT(CAST(CAST([Year] AS CHAR(4)) + '-' + CAST([Month] AS CHAR(2)) + '-01' AS DATE), 'MMM-yyyy') AS [DateCol] 
  FROM dbo.Test)

SELECT Client
      ,ContainerId
      ,ISNULL([Jan-2019], 0) AS [Jan-2019]
      ,ISNULL([Jan-2020], 0) AS [Jan-2020]
      ,ISNULL([Feb-2020], 0) AS [Feb-2020]
  FROM cte
 PIVOT  
(  
    SUM(NumberOfViews)  
    FOR DateCol IN ([Jan-2019], [Jan-2020], [Feb-2020])  
) AS PivotTable;    
1
user12493039user12493039 5 अप्रैल 2020, 12:33

मुझे लगता है कि आपको एक गतिशील धुरी की आवश्यकता है क्योंकि माह-वर्ष स्थिर नहीं है। कृपया इसे तर्क के नीचे आजमाएं-

कृपया अपने मूल तालिका नाम का उपयोग करें जहाँ भी आपको स्क्रिप्ट में "your_table" मिले।

DECLARE @cols AS NVARCHAR(MAX),
@sqlCommand  AS NVARCHAR(MAX);


SELECT  @cols =
STUFF((SELECT   ( '],[' +  A.YM)
        FROM 
        (
            SELECT 
            CASE Month
                WHEN 1 THEN 'Jan-' WHEN 2 THEN 'Feb-' WHEN 3 THEN 'Mar-'
                WHEN 4 THEN 'Apr-' WHEN 5 THEN 'May-' WHEN 6 THEN 'Hun-'
                WHEN 7 THEN 'Jul-' WHEN 8 THEN 'Aug-' WHEN 9 THEN 'Sep-'
                WHEN 10 THEN 'Oct-' WHEN 11 THEN 'Nov-' WHEN 12 THEN 'Dec-'
            END
            + CAST(Year AS VARCHAR) YM
            FROM your_table
        ) A
        ORDER BY A.YM 
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)')
    ,1,1,'')+']'
FROM your_table

SET @sqlCommand= 
N'SELECT Client,ContainerID,'+SUBSTRING(@cols,2,LEN(@cols))+'
FROM 
(
    SELECT Client,ContainerID,YM,NumberOfViews 
    FROM 
    ( 
        SELECT Client,ContainerID,NumberOfViews,
        CASE Month
            WHEN 1 THEN ''Jan-'' WHEN 2 THEN ''Feb-'' WHEN 3 THEN ''Mar-''
            WHEN 4 THEN ''Apr-'' WHEN 5 THEN ''May-'' WHEN 6 THEN ''Hun-''
            WHEN 7 THEN ''Jul-'' WHEN 8 THEN ''Aug-'' WHEN 9 THEN ''Sep-''
            WHEN 10 THEN ''Oct-'' WHEN 11 THEN ''Nov-'' WHEN 12 THEN ''Dec-''
        END
        + CAST(Year AS VARCHAR) YM
        FROM your_table
    )A
) AS P
PIVOT
(
    SUM(NumberOfViews)
    FOR YM IN('+SUBSTRING(@cols,2,LEN(@cols))+')
) PVT'

--PRINT @sqlCommand
EXEC (@sqlCommand)
1
mkRabbani 5 अप्रैल 2020, 12:51