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

SQL सर्वर 2008 में कुछ पंक्तियों को कॉलम में स्वैप करें

शायद कुछ ऐसा:

पहले परीक्षण डेटा:

CREATE TABLE #tbl (AccountManager VARCHAR(100), Action VARCHAR(100),Count INT)

INSERT INTO #tbl
VALUES
    ('Joe','Client Negotiation',10),
    ('Bloggs','Closing',1),
    ('Aunty','Email',12),
    ('Marie','Preparing Contract',32)

यदि आप जानते हैं कि कॉलम स्थिर हैं। तब आप यह कर सकते हैं:

SELECT
    AccountManager,
    ISNULL([Client Negotiation],0) AS [Client Negotiation],
    ISNULL([Closing],0) AS [Closing],
    ISNULL([Email],0) AS [Email],
    ISNULL([Preparing Contract],0) AS [Preparing Contract]
FROM
(
SELECT
    tbl.AccountManager,
    tbl.Action,
    tbl.Count
FROM
    #tbl AS tbl
) AS p
PIVOT
(
    SUM([Count])
    FOR [Action] IN([Client Negotiation],[Closing],[Email],[Preparing Contract])
) AS pvt

अन्यथा आपको इस तरह एक गतिशील धुरी करनी होगी:

पहले अद्वितीय कॉलम नाम:

DECLARE @cols VARCHAR(MAX),
        @colsWithIsNull VARCHAR(MAX)
;WITH CTE
AS
(
    SELECT
        ROW_Number() OVER(PARTITION BY tbl.Action ORDER BY tbl.Action) AS iRank,
        tbl.Action
    FROM
        #tbl AS tbl
)
SELECT  @cols = COALESCE(@cols + ','+QUOTENAME(Action),
                     QUOTENAME(Action)),
        @colsWithIsNull=COALESCE(@colsWithIsNull + ',ISNULL('+QUOTENAME(Action)+',0) AS '+QUOTENAME(Action),
                     'ISNULL('+QUOTENAME(Action)+',0) AS '+QUOTENAME(Action))
FROM
    CTE
WHERE
    iRank=1

फिर इस तरह की गतिशील धुरी:

DECLARE @query NVARCHAR(4000)=
N'SELECT
    AccountManager,
    '[email protected]+'
FROM
(
SELECT
    tbl.AccountManager,
    tbl.Action,
    tbl.Count
FROM
    #tbl AS tbl
) AS p
PIVOT
(
    SUM([Count])
    FOR [Action] IN('[email protected]+')
) AS pvt'

EXECUTE(@query)

फिर मेरे मामले में मैं अस्थायी तालिका छोड़ दूंगा:

DROP TABLE #tbl


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Driver.getConnection SQLServer ड्राइवर और Java का उपयोग करके हैंग हो जाता है 1.6.0_29

  2. प्राथमिक आईडी फ़ील्ड के साथ संघ दो अलग-अलग टेबल

  3. त्रुटि 0xc0202049:डेटा प्रवाह कार्य 1:केवल-पढ़ने के लिए कॉलम में डालने में विफलता

  4. SQL सर्वर एजेंट कार्य संशोधित करें (T-SQL)

  5. समूह के लिए tsql कुल स्ट्रिंग