/ / Jak utworzyć tabelę z wieloma wierszami i kolumnami używając tylko klauzuli SELECT (np. Używając SELECT bez klauzuli FROM) - sql, sql-server, tsql

Jak utworzyć tabelę z wieloma wierszami i kolumnami używając tylko klauzuli SELECT (np. Używając SELECT bez klauzuli FROM) - sql, sql-server, tsql

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ć

  1. tabela z jedną kolumną i wieloma wierszami

  2. tabela z wieloma kolumnami i jednym rzędem

  3. 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 № 1

Moż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