2016-11-10 8 views
1

私はこのような二つの列を持つテーブルがある:2つの列が

A 1 
B 2 
C 3 
D 4 
E 5 

など

私は別の行の各列のデータを、一つの列にそれらを取得したいですこのような新しいコラム:

A 
1 
B 
2 
C 
3 
D 
4 
E 
5 

など

+0

あなたは、このための機能を使用しようとか、substring関数 – Learning

+0

の組み合わせでCTEのクエリを使用することができます並べ替えの結果を得るために順序を正しく取得するには、並べ替えを行うためにソーステーブルに3番目の列を追加する必要があります。以下の回答とともに、期待される結果が得られるはずです。 –

+0

ここでの主な問題は、SQLテーブルをスプレッドシートと同じものとして扱うことです。表面的な類似性にもかかわらず、彼らは同じことではありません。すべての行の値は、単一の「物」に密接に揃えられている必要があります。別々の行は独立している必要があります。行と列は入れ替えできません。 –

答えて

1
CREATE TABLE #Table1(Value VARCHAR(10),Id VARCHAR(10)) 

INSERT INTO #Table1(Value ,Id) 
SELECT 'A',1 UNION ALL 
SELECT 'B',2 UNION ALL 
SELECT 'C',3 UNION ALL 
SELECT 'D',4 UNION ALL 
SELECT 'E',5 

;WITH _CTE (Name) AS 
(
SELECT Value [Name] 
FROM #Table1 
UNION ALL 
SELECT Id [Name] 
FROM #Table1 
) 
SELECT * FROM _CTE 
1

トリッキーな部分は、代替行のデータ

select col2 
from 
(select col1, 1 as flag, col1 from tab 
    union all 
    select col1, 2,   col2 from tab 
) as dt 
order by col1, flag 

である。しかし、なぜあなたはすべてでこれを実行しようとするのですか?

1

このお試しください:私はUNION ALLを使用しますが、ここでUNPIVOT代替手段です

WITH CTE AS 
(
    SELECT Col1Name Name,(ROW_NUMBER() OVER(ORDER BY(SELECT NULL))) RN 
    FROM TableName 
    UNION 
    SELECT Col2Name Name,(ROW_NUMBER() OVER(ORDER BY(SELECT NULL)))+1 RN 
    FROM TableName 
) 
SELECT Name 
FROM CTE 
ORDER BY RN 
+0

この順序は、順序を付ける3番目の列を使わずに行うことができます。おそらくあなたはそれを拡張することができますか? –

+0

提案していただきありがとうございます。このスクリプトは何を探しているのかを判断します。サンプルデータでもこれを試すことができます。 ;) –

+1

確かに:)私はちょうど 'ORDER BY(SELECT NULL)'が任意の順序をしていることを指摘したいと思います。例えば、索引が追加/変更されたときなどにはうまく変わる可能性があります。私は答えをタイプするが、既に3つの答えがあるので、私はあなたがそれを拡張できると思った。 –

2

を:

CREATE TABLE #Table1(letter VARCHAR(10),Id VARCHAR(10)) 

INSERT INTO #Table1(letter ,Id) 
SELECT 'A',1 UNION ALL 
SELECT 'B',2 UNION ALL 
SELECT 'C',3 UNION ALL 
SELECT 'D',4 UNION ALL 
SELECT 'E',5 


SELECT [value] 
FROM #Table1 
UNPIVOT 
(
    [value] FOR [Column] IN ([Id], [letter]) 
) UNPVT 


DROP TABLE #Table1;