7

列のあるテーブルがありますcol1, col2, col3。テーブルには多くの行があります。

val1, val2, val3そのような行の1つであると仮定しましょう。結果を次のように取得したい

Col1, Val1
Col2, Val2
Col3, Val3

つまり、3行です。各列とその値に1つずつです。

SQLServer2008を使用しています。ピボットについて読みました。ピボットはこの問題を解決する方法ですか?誰かが私をいくつかの例や解決策に導き、この問題を解決する方法を教えてもらえますか?

どうもありがとう

4

3 に答える 3

6

多分このようなもの:

テストデータ

DECLARE @T TABLE(Col1 INT, Col2 INT, Col3 INT)
INSERT INTO @T
VALUES (1,1,1)

クエリ

SELECT
    *
FROM
(
    SELECT
        t.Col1,
        t.Col2,
        t.Col3
    FROM
        @T AS t
) AS SourceTable
UNPIVOT
(
    Value FOR Col IN
    (Col1,Col2,Col3)
) AS unpvt

出力

1   Col1
1   Col2
1   Col3
于 2012-06-08T07:55:36.790 に答える
2

この種のことを行うには、以下をお読みください:PIVOTとUNPIVOTの使用

ピボット関数を使用すると、行の値を列のから変換できます。

また、次も確認してください:SQLServerでの動的ピボット

例 :

create table #temptable(colorname varchar(25),Hexa varchar(7),rgb varchar(1), rgbvalue tinyint)    
GO   
insert into #temptable values('Violet','#8B00FF','r',139);   
insert into #temptable values('Violet','#8B00FF','g',0);   
insert into #temptable values('Violet','#8B00FF','b',255);   
insert into #temptable values('Indigo','#4B0082','r',75);   
insert into #temptable values('Indigo','#4B0082','g',0);   
insert into #temptable values('Indigo','#4B0082','b',130);   
insert into #temptable values('Blue','#0000FF','r',0);   
insert into #temptable values('Blue','#0000FF','g',0);   
insert into #temptable values('Blue','#0000FF','b',255);



SELECT colorname,hexa,[r], [g], [b]   
FROM  
(SELECT colorname,hexa,rgb,rgbvalue   
    FROM #temptable) AS TableToBePivoted   
PIVOT   
(   
sum(rgbvalue)   
FOR rgb IN ([r], [g], [b])   
) AS PivotedTable;
于 2012-06-08T07:46:03.700 に答える
0

一時テーブルを作成します。

CREATE TABLE #table2
(
name NCHAR,
bonus INT
)

空の場合は、以下のステートメントを選択して実行します。

SELECT * FROM #table2

INSERT INTO #table2 (name,bonus) VALUES ('A',10)
INSERT INTO #table2 (name,bonus) VALUES ('B',20)
INSERT INTO #table2 (name,bonus) VALUES ('C',30)

値をテーブルに挿入した後。レコードを取得した場合は、次の行を選択して実行します。

SELECT * FROM #table2

入力:

name    bonus
A   10
B   20
C   30

入力をこの結果のように変更します

結果:

Cost        A    B  C
Bonus   10  20  30

このコードを使用することにより:

SELECT 'Bonus' AS Cost, 
[A],[B],[C]
FROM
(SELECT name, Bonus 
FROM #table2) AS TempTbl 
PIVOT
(
    AVG(bonus)
    FOR [name] IN ([A],[B],[C])
) AS PivotTable;
于 2015-07-25T10:20:07.113 に答える