2016-08-30 8 views
2

申し訳ありませんが間違った方法で尋ねると、私はSQLを初めて使用しています。TSQL:次の行の代わりに新しい列が必要です

私はその後、別のテーブルに

を接合した後の値を挿入しています1つの一時テーブルを持って、私は3フィールド(日時、colm2日時、colm3お金などcolm1)とその一時テーブルを更新する必要がある場所に出くわした これは、私は一時テーブルのフィールドを作成しました。

今、

select colm1,colm2,sum(colm3) 
    from OrginalTable 
    where [email protected] 
    group by colm1,colm2 

が、これはのような結果となりますと仮定することができます:複数のデータは、その後、私は15回まで、以下のように行う必要がある場合、

一時テーブルに更新した後、ここで

enter image description here

Colm1、Com2、Colm3、colm1、colm2、colm3,

私はこれを必要とする代わりに、新しい行を作成する10

enter image description here

実行結果が1行のすべてであるべきである1行にして、新しいフィールドとして表示されます。

私は実際に誰かが私に例を挙げたり、解決策を教えてくれるかどうか、私が期待していることをすることができるかどうか、本当に混乱しています。

最後に、あなたがいないデシベルのためにあなたのUI層の上に行う必要があります何かのように聞こえるあなたの助けに感謝

+1

申し訳ありませんが、これはあまりにも混乱しています。あなたの望む結果は? 「複数のデータがある場合は、15回まで以下のようにする必要がある」< - これはどういう意味ですか、なぜ15回ですか? – Lamak

+0

新しい列が必要な場合は、列を選択する必要があると思います。 –

+0

@Lamak私は期待通りに質問を更新しました。ありがとうございます – Akka

答えて

1

あなたはUNPIVOTを使用することができUI上でそれを行うべき理由です

、その後Dynamic PIVOT

DEMO

セットアップ:

create table temp (
    col1 integer, col2 integer, col3 integer 
) 

insert into temp values (1, 1, 1000); 
insert into temp values (1, 2, 500); 
insert into temp values (2, 3, 800); 
insert into temp values (2, 4, 700); 
insert into temp values (3, 1, 1100); 

UNPIVOTクエリ:君は偽の列名を作成するにはrow_numberが必要です。

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX); 

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.myCol) 
      FROM temp2 c 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT rn, ' + @cols + ' from 
      (
       select rn 
        , myCol 
        , myVal 
       from temp2 
      ) x 
      pivot 
      (
       max(myVal) 
       for myCol in (' + @cols + ') 
      ) p ';      

EXEC sp_executesql @query 

が出力:アンピボットと動的ピボットは

を結果しかし、そのようにすべての列が一列に

WITH cte as (
    SELECT row_number() over (order by col1, col2) as rn, 
      col1, col2, col3 
    FROM temp 
) 
SELECT 1 as rn, 
     'c_' + 
     CAST(rn AS VARCHAR(16)) + '_' + 
     myCol as myCol, 
     myVal 
INTO temp2    
FROM 
    (SELECT rn, col1, col2, col3 
    FROM cte) p 
UNPIVOT 
    (myVal FOR myCol IN 
     (col1, col2, col3) 
)AS unpvt; 

SELECT * FROM temp2; 

ダイナミックピボット現れ、皆のため1に行を上書きenter image description here

1

は、そうでなければ、問題は、あなたが15行がある知っている必要がある

SELECT t1.*, t2.*, ....... , t15.* 
FROM yourTable as t1, 
     yourTable as t2, 
     ...... 
     yourTable as t15 
WHERE t1.col1 >= t2.col1 and t1.col2 > t2.col2 
    AND t2.col1 >= t3.col1 and t2.col2 > t3.col2 
    .... 
    AND t14.col1 >= t14.col15 and t14.col2 > t15.col2 

ようなものが必要なので、その数は、クエリの文句を言わない作業を変更した場合。あなたの代わりに

+0

いいえ、これはSQLだけですべて実行されます。私はUIを通じてやりたいと思っていますが、もしそうなら、私はUIを作らなければなりません – Akka

関連する問題