类似于Simulate a table with multiple rows just with SELECT statement的问题-这个问题要求一个多行的单列。
如何模拟具有、多列、和行的表?
我已经走到了这一步(对于多列、单行):
SELECT 'John Doe' AS [Customer Name],
'31' AS [Customer Age],
'pizza' AS [Food]但不确定如何获取多行数据。
使用sql-server
发布于 2019-01-07 16:05:39
使用values表构造函数:
SELECT v.*
FROM (VALUES ('John Doe', 31, 'pizza'),
('John Doe', 31, 'pizza')
) v(customer_name, customer_age, food);备注:
age是一个糟糕的专栏。相反,你应该有出生日期。发布于 2019-01-07 16:20:40
选项1: UNION ALL
SELECT
[Customer Name] = 'John Doe',
[Customer Age] = 31,
Food = 'pizza'
UNION ALL
SELECT
[Customer Name] = 'Jane Doe',
[Customer Age] = 25,
Food = 'cake'您只需在第一组中提供列名:
SELECT
[Customer Name] = 'John Doe',
[Customer Age] = 31,
Food = 'pizza'
UNION ALL
SELECT 'Jane Doe', 25, 'cake' UNION ALL
SELECT 'Jane Doe', 16, 'coke' UNION ALL
SELECT 'Jane Doe', 19, 'salad'选项2: VALUES
SELECT
T.[Customer Name],
T.[Customer Age],
T.Food
FROM
(VALUES
('John Doe', 31, 'pizza'),
('Jane Doe', 25, 'cake')
) AS T([Customer Name], [Customer Age], Food)我推荐第二种方法,因为您可以强制执行所需的数据类型,例如:
SELECT
[Customer Name] = CONVERT(VARCHAR(50), T.[Customer Name]),
[Customer Age] = CONVERT(TINYINT, T.[Customer Age]),
Food = CONVERT(VARCHAR(100), T.Food)
FROM
(VALUES
('John Doe', 31, 'pizza'),
('Jane Doe', 25, 'cake')
) AS T([Customer Name], [Customer Age], Food)使用VALUES,您还可以直接连接到其他表(或应用函数),而无需将SELECT包装在CTE或子查询中。
但是,如果您想为了测试目的而模拟一个表(特别是如果您正在测试性能),我建议您不要使用,因为这两种方法都需要您显着地更改当前测试的语句。为此,只需创建一个临时表,该表的确切定义是您希望模拟并加载数据的表。
https://stackoverflow.com/questions/54077740
复制相似问题