私はこのような二つの列を持つテーブルがある:2つの列が
A 1
B 2
C 3
D 4
E 5
など
私は別の行の各列のデータを、一つの列にそれらを取得したいですこのような新しいコラム:
A
1
B
2
C
3
D
4
E
5
など
私はこのような二つの列を持つテーブルがある:2つの列が
A 1
B 2
C 3
D 4
E 5
など
私は別の行の各列のデータを、一つの列にそれらを取得したいですこのような新しいコラム:
A
1
B
2
C
3
D
4
E
5
など
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
トリッキーな部分は、代替行のデータ
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
である。しかし、なぜあなたはすべてでこれを実行しようとするのですか?
このお試しください:私は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
この順序は、順序を付ける3番目の列を使わずに行うことができます。おそらくあなたはそれを拡張することができますか? –
提案していただきありがとうございます。このスクリプトは何を探しているのかを判断します。サンプルデータでもこれを試すことができます。 ;) –
確かに:)私はちょうど 'ORDER BY(SELECT NULL)'が任意の順序をしていることを指摘したいと思います。例えば、索引が追加/変更されたときなどにはうまく変わる可能性があります。私は答えをタイプするが、既に3つの答えがあるので、私はあなたがそれを拡張できると思った。 –
を:
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;
あなたは、このための機能を使用しようとか、substring関数 – Learning
の組み合わせでCTEのクエリを使用することができます並べ替えの結果を得るために順序を正しく取得するには、並べ替えを行うためにソーステーブルに3番目の列を追加する必要があります。以下の回答とともに、期待される結果が得られるはずです。 –
ここでの主な問題は、SQLテーブルをスプレッドシートと同じものとして扱うことです。表面的な類似性にもかかわらず、彼らは同じことではありません。すべての行の値は、単一の「物」に密接に揃えられている必要があります。別々の行は独立している必要があります。行と列は入れ替えできません。 –