例如,我的表数据如下所示:
ID intValue date
1 5 1/1/1
1 10 22/22/22
我想要做的是将每个intValue实例的intValue
列乘以5,10和15。
所以我的结果集就像:
ID intValue date
1 25 1/1/1
1 50 1/1/1
1 75 1/1/1
1 50 22/22/22
1 100 22/22/22
1 150 22/22/22
我如何获得这样的结果集?
解
qxg's answer下面最准确地回答了如何最好地处理上述问题。另一种操纵数据的方法,以及我使用它的方法是:
SELECT CASE WHEN CrossTable.Value = 5 THEN 'By Five!'
WHEN CrossTable.Value = 10 Then 'By Ten!'
WHEN CrossTable.Value = 15 Then 'By Fifteen!' END AS ByWhat,
CrossTable.Value As Base Value,
intValue * CrossTable.Value
FROM table1
CROSS JOIN (VALUES (5), (10), (15)) CrossTAble(Value)
答案 0 :(得分:3)
利用CROSS JOIN和值
SELECT ID, table1.intValue * Val.N, date
FROM table1
CROSS JOIN (VALUES (5), (10), (15)) Val(N)
答案 1 :(得分:1)
此解决方案仅使用单个union
,而不是将表合并到自身:
WITH numbers
AS ( SELECT 5 AS n
UNION ALL
SELECT n + 5
FROM numbers
WHERE n + 5 <= 15
)
SELECT id ,
intValue + n AS intValue ,
date
FROM numbers
CROSS JOIN your_table
该解决方案仅限于提供可以数学表达的序列。但是,它的优点是只需稍微调整运行时通过变量提供的值的数量。
答案 2 :(得分:1)
SELECT A.ID, A.intValue*5*B.number intValue, A.[date]
FROM YourTable A
CROSS JOIN (SELECT *
FROM master.dbo.spt_values
WHERE type = 'P'
AND number BETWEEN 1 AND 3) B