/ / Как да създадем таблица с няколко реда и колони, като използваме само клаузата SELECT (т.е. използваме клаузата SELECT без FROM) - sql, sql-server, tsql

Как да създадем таблица с множество редове и колони, използвайки само SELECT клауза (т.е. използвайки клаузата SELECT без FROM) - sql, sql-server, tsql

Знам, че в SQL Server може да се използва клауза SELECT без клауза FROM и да се създаде таблица с един ред и една колона

SELECT 1 AS n;

Но аз просто се чудех, възможно ли е да се използва SELECT клауза без клауза FROM, за да се създаде

  1. таблица с една колона и няколко реда

  2. таблица с няколко колони и един ред

  3. таблица с няколко колони и няколко реда

Опитах много комбинации като

SELECT VALUES(1, 2) AS tableName(n, m);

без успех.

Отговори:

3 за отговор № 1

Можете да го направите с CTE и да използвате union(Използвайте union all ако искате да покажете дубликати)

Rextester проба за всичките три сценария

  • Една колона и няколко реда

    with tbl1(id) as
    (select 1 union all
    select 2)
    select * from tbl1;
    
  • Един ред и няколко колони

    with tbl2(id,name) as
    (select 1,"A")
    select * from tbl2;
    
  • Няколко колони и няколко реда

    with tbl3(id,name) as
    (select 1,"A" union all
    select 2,"B")
    select * from tbl3;
    

2 за отговор № 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 за отговор № 3

Можете да направите всичко това с помощта UNION ключова дума

create table tablename as select 1 as n,3 as m union select 2 as n,3 as m

В Oracle ще бъде двойно:

create table tablename as select 1 as n,3 as m from dual union select 2 as n,3 as m from dual

1 за отговор № 4

Можете да използвате оператора на UNION:

CREATE TABLE AS SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

Операторът на UNION избира по подразбиране само отделни стойности. За да позволите дублиране на стойности, можете да използвате UNION ALL.
Имената на графите в серията от резултати обикновено са равни на имената на колоните в първия SELECT израз в UNION.


1 за отговор № 5

Опитайте тази:

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