Wiem, że w SQL Serverze można użyć klauzuli SELECT bez klauzuli FROM i utworzyć tabelę z jednym wierszem i jedną kolumną
SELECT 1 AS n;
Zastanawiałem się jednak, czy można użyć klauzuli SELECT bez klauzuli FROM, aby ją utworzyć
tabela z jedną kolumną i wieloma wierszami
tabela z wieloma kolumnami i jednym rzędem
tabela z wieloma kolumnami i wieloma wierszami
Próbowałem wielu kombinacji, takich jak
SELECT VALUES(1, 2) AS tableName(n, m);
bez powodzenia.
Odpowiedzi:
3 dla odpowiedzi № 1Możesz to zrobić za pomocą CTE i używania union
(Posługiwać się union all
jeśli chcesz wyświetlać duplikaty)
Próbka Rextester dla wszystkich 3 scenariuszy
Jedna kolumna i wiele wierszy
with tbl1(id) as (select 1 union all select 2) select * from tbl1;
Jeden wiersz i wiele kolumn
with tbl2(id,name) as (select 1,"A") select * from tbl2;
Wiele kolumn i wiele wierszy
with tbl3(id,name) as (select 1,"A" union all select 2,"B") select * from tbl3;
2 dla odpowiedzi nr 2
-- One column, multiple rows.
select 1 as ColumnName union all select 2; -- Without FROM;
select * from ( values ( 1 ), ( 2 ) ) as Placeholder( ColumnName ); -- With FROM.
-- Multiple columns, one row.
select 1 as TheQuestion, 42 as TheAnswer; -- Without FROM.
select * from ( values ( 1, 42 ) ) as Placeholder( TheQuestion, TheAnswer ); -- With FROM.
-- Multiple columns and multiple rows.
select 1 as TheQuestion, 42 as TheAnswer union all select 1492, 12; -- Without FROM.
select * from ( values ( 1, 2 ), ( 2, 4 ) ) as Placeholder( Column1, Column2 ); -- With FROM.
1 dla odpowiedzi nr 3
Możesz to wszystko zrobić za pomocą UNION
słowo kluczowe
create table tablename as select 1 as n,3 as m union select 2 as n,3 as m
W Oracle będzie podwójne:
create table tablename as select 1 as n,3 as m from dual union select 2 as n,3 as m from dual
1 dla odpowiedzi nr 4
Możesz użyć operatora UNION:
CREATE TABLE AS SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
Operator UNION domyślnie wybiera tylko różne wartości. Aby umożliwić zduplikowane wartości, możesz użyć UNION ALL.
Nazwy kolumn w zestawie wyników są zwykle równe nazwom kolumn w pierwszej instrukcji SELECT w UNION.
1 dla odpowiedzi nr 5
Spróbuj tego:
--1) a table with one column and multiple rows
select * into tmptable0 from(
select "row1col1" as v1
union all
select "row2col1" as v1
) tmp
--2) a table with multiple columns and one row
select "row1col1" as v1, "row1col2" as v2 into tmptable1
--3) a table with multiple columns and multiple rows
select * into tmptable2 from(
select "row1col1" as v1, "row1col2" as v2
union all
select "row2col1" as v2, "row2col2" as v2
) tmp