Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Hoán đổi một số hàng thành cột trong SQL Server 2008

Có thể như thế này:

Đầu tiên, dữ liệu thử nghiệm:

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)

Nếu bạn biết rằng các cột là tĩnh. Sau đó, bạn có thể làm điều này:

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

Nếu không, bạn phải thực hiện một trục động như thế này:

Đầu tiên là các tên cột duy nhất:

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

Sau đó, trục xoay động như thế này:

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)

Sau đó, trong trường hợp của tôi, tôi sẽ bỏ bảng tạm thời:

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. Truy vấn Sql để chèn ngày giờ trong SQL Server

  2. SMALLDATETIMEFROMPARTS () Ví dụ trong SQL Server (T-SQL)

  3. cách cấu hình tệp cấu hình ngủ đông cho máy chủ sql

  4. Xóa danh tính khỏi một cột trong bảng

  5. Lọc câu lệnh SELECT theo thời gian trong ngày