0

次のようにデータを格納するテーブルがあります:
username status
user1 HT
user2 EC
user1 PR
user1 EC
user2 HT

このような結果が必要です

ユーザー名 HT EC PR 総計 ユーザー
1 1 1 1 3 ユーザー
2 1 1 0 2
合計 2 2 1 5

誰か助けてください。前もって感謝します

4

2 に答える 2

1

ステータス値が固定されている場合は簡単です。

select 
    username,
    sum(case when status='HT' then 1 else 0 end) as HT,
    sum(case when status='EC' then 1 else 0 end) as EC,
    sum(case when status='PR' then 1 else 0 end) as PR,
    count(*) as total
from
    table
group by
    username
WITH ROLLUP

動的な場合は、http://beyondrelational.com/modules/2/blogs/70/posts/10840/dynamic-pivot-in-sql-server-2005.aspxを使用する必要があります。

于 2012-07-16T06:36:43.407 に答える
1
        USE AdventureWorks
    GO
    -- Creating Test Table
    CREATE TABLE Product(Cust VARCHAR(25), Product VARCHAR(20), QTY INT)
    GO
    -- Inserting Data into Table
    INSERT INTO Product(Cust, Product, QTY)
    VALUES('KATE','VEG',2)
    INSERT INTO Product(Cust, Product, QTY)
    VALUES('KATE','SODA',6)
    INSERT INTO Product(Cust, Product, QTY)
    VALUES('KATE','MILK',1)
    INSERT INTO Product(Cust, Product, QTY)
    VALUES('KATE','BEER',12)
    INSERT INTO Product(Cust, Product, QTY)
    VALUES('FRED','MILK',3)
    INSERT INTO Product(Cust, Product, QTY)
    VALUES('FRED','BEER',24)
    INSERT INTO Product(Cust, Product, QTY)
    VALUES('KATE','VEG',3)
    GO
    -- Selecting and checking entires in table
    SELECT *
    FROM Product
    GO
    -- Pivot Table ordered by PRODUCT
    SELECT PRODUCT, FRED, KATE
    FROM (
    SELECT CUST, PRODUCT, QTY
    FROM Product) up
    PIVOT (SUM(QTY) FOR CUST IN (FRED, KATE)) AS pvt
    ORDER BY PRODUCT
    GO
    -- Pivot Table ordered by CUST
    SELECT CUST, VEG, SODA, MILK, BEER, CHIPS
    FROM (
    SELECT CUST, PRODUCT, QTY
    FROM Product) up
    PIVOT (SUM(QTY) FOR PRODUCT IN (VEG, SODA, MILK, BEER, CHIPS)) AS pvt
    ORDER BY CUST
    GO
    -- Unpivot Table ordered by CUST
    SELECT CUST, PRODUCT, QTY
    FROM
    (
    SELECT CUST, VEG, SODA, MILK, BEER, CHIPS
    FROM (
    SELECT CUST, PRODUCT, QTY
    FROM Product) up
    PIVOT
    ( SUM(QTY) FOR PRODUCT IN (VEG, SODA, MILK, BEER, CHIPS)) AS pvt) p
    UNPIVOT
    (QTY FOR PRODUCT IN (VEG, SODA, MILK, BEER, CHIPS)
    ) AS Unpvt
    GO
    -- Clean up database
    DROP TABLE Product
    GO

    ResultSet:
    -- Selecting and checking entires in table
    Cust Product QTY
    ------------------------- -------------------- -----------
    KATE VEG 2
    KATE SODA 6
    KATE MILK 1
    KATE BEER 12
    FRED MILK 3
    FRED BEER 24
    KATE VEG 3

    -- Pivot Table ordered by PRODUCT
    PRODUCT FRED KATE
    -------------------- ----------- -----------
    BEER 24 12
    MILK 3 1
    SODA NULL 6
    VEG NULL 5

    -- Pivot Table ordered by CUST
    CUST VEG SODA MILK BEER CHIPS
    ------------------------- ----------- ----------- ----------- ----------- -----------
    FRED NULL NULL 3 24 NULL
    KATE 5 6 1 12 NULL

    -- Unpivot Table ordered by CUST
    CUST PRODUCT QTY
    ------------------------- -------- -----------
    FRED MILK 3
    FRED BEER 24
    KATE VEG 5
    KATE SODA 6
    KATE MILK 1
    KATE BEER 12 12

参照: http://blog.sqlauthority.com/2008/06/07/sql-server-pivot-and-unpivot-table-examples/

于 2012-07-16T06:37:22.073 に答える