Para un problema específico, quiero los valores de la tabla como se muestra a continuación,

number  |  number_in_words
--------------------------
   1    |        one
   2    |        two
   3    |        three
   4    |        four
   5    |        five
   6    |        six
   7    |        seven
   8    |        eight
   9    |        nine
   0    |        zero

Pero no existe tal tabla en la base de datos, y se supone que no debo crear una tabla en DB.

Usando la siguiente subconsulta obtuve la tabla con solo una fila, ¿hay alguna forma de que pueda obtener toda la tabla anterior usando consultas similares?

(select '1' as number, 'one' as number_in_words)
0
Ganesh M S 7 may. 2021 a las 17:50

4 respuestas

La mejor respuesta

Puede hacerlo así, preparándolo dentro de la subconsulta usando seleccionar de valores:

(SELECT * FROM (VALUES (1,'one'),(2,'two'),(3,'three'),(4,'four'),(5,'five')) numbertable(number,number_in_words))
3
eshirvana 7 may. 2021 a las 15:01

No creo que pueda tener DDL (crear tabla) dentro de DML, intente verificar la expresión de tabla común "WITH", detrás de la escena, la cláusula WITH creará una tabla temporal y puede hacer referencia a ella en su subconsulta.

https://docs.microsoft.com/en-us/sql/t-sql/queries/with-common-table-expression-transact-sql?view=sql-server-ver15

1
Athi 7 may. 2021 a las 14:55

También puede utilizar una variable de tabla.

DECLARE @lookup TABLE (numVal INT NOT NULL, strVal varchar(10))
INSERT INTO @lookup(numVal, strVal) VALUES (1, 'one'), (2, 'two'), (3, 'three') --etc

-- and then use the value similar to a normal table using joins or whatever
select l.strVal --,  other values
from yourTable as yt INNER JOIN @lookup as l ON yt.numericValue = l.numVal
1
Igor 7 may. 2021 a las 15:00

Cualquiera que pueda consultar la base de datos puede crear una tabla temporal. Investigue las tablas temporales y podrá hacer una exactamente así.

CREATE TABLE #temp (number int PRIMARY KEY, number_in_words varchar(10))
INSERT INTO #temp (number, number_in_words) VALUES 
 (1, 'one')
,(2, 'two')
,(3, 'three')

Ect.

Luego, cuando hayas terminado:

DROP TABLE #temp
0
Zorkolot 7 may. 2021 a las 17:45