129

いくつかの簡単なSQLServerPIVOTの例を見つけようとしています。私が見つけた例のほとんどは、数を数えたり合計したりすることを含みます。文字列データをピボットしたいだけです。たとえば、次のクエリを返します。

Action1 VIEW  
Action1 EDIT  
Action2 VIEW  
Action3 VIEW  
Action3 EDIT  

(可能であれば)PIVOTを使用して、次のような結果を作成したいと思います。

Action1 VIEW EDIT  
Action2 VIEW NULL  
Action3 VIEW EDIT  

これはPIVOT機能でも可能ですか?

4

7 に答える 7

167

MAX 集計関数は、数値だけでなくテキストでも機能することに注意してください。このクエリでは、テーブルを 1 回だけスキャンする必要があります。

SELECT Action,
       MAX( CASE data WHEN 'View' THEN data ELSE '' END ) ViewCol, 
       MAX( CASE data WHEN 'Edit' THEN data ELSE '' END ) EditCol
 FROM t
 GROUP BY Action
于 2008-09-02T19:55:19.270 に答える
55

テーブルのセットアップ:

CREATE TABLE dbo.tbl (
    action VARCHAR(20) NOT NULL,
    view_edit VARCHAR(20) NOT NULL
);

INSERT INTO dbo.tbl (action, view_edit)
VALUES ('Action1', 'VIEW'),
       ('Action1', 'EDIT'),
       ('Action2', 'VIEW'),
       ('Action3', 'VIEW'),
       ('Action3', 'EDIT');

あなたのテーブル: SELECT action, view_edit FROM dbo.tbl

あなたのテーブル

PIVOT を使用しないクエリ:

SELECT Action, 
[View] = (Select view_edit FROM tbl WHERE t.action = action and view_edit = 'VIEW'),
[Edit] = (Select view_edit FROM tbl WHERE t.action = action and view_edit = 'EDIT')
FROM tbl t
GROUP BY Action

PIVOT を使用したクエリ:

SELECT [Action], [View], [Edit] FROM
(SELECT [Action], view_edit FROM tbl) AS t1 
PIVOT (MAX(view_edit) FOR view_edit IN ([View], [Edit]) ) AS t2

両方のクエリの結果:
ここに画像の説明を入力

于 2012-06-01T20:53:00.900 に答える
53

特にSQLServerPIVOT関数を使用する場合は、元の2つの列がactとcmdと呼ばれていると仮定すると、これは機能するはずです。(しかし、見るのはそれほどきれいではありません。)

SELECT act AS 'Action', [View] as 'View', [Edit] as 'Edit'
FROM (
    SELECT act, cmd FROM data
) AS src
PIVOT (
    MAX(cmd) FOR cmd IN ([View], [Edit])
) AS pvt
于 2008-09-02T20:52:47.977 に答える
7

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

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
于 2011-08-27T09:12:46.653 に答える
6

サンプルや、一意の列の数が限られているサンプルでは、​​これで十分です。

select 
    distinct a,
    (select distinct t2.b  from t t2  where t1.a=t2.a and t2.b='VIEW'),
    (select distinct t2.b from t t2  where t1.a=t2.a and t2.b='EDIT')
from t t1
于 2008-08-23T19:44:24.117 に答える