Sql 使用Union语句中的值进行计算
在SQL Server中,我正在寻找在union select中重用值的最佳方法,以便在计算中使用这些值: 比如: 我知道的唯一方法是使用declare,比如:Sql 使用Union语句中的值进行计算,sql,sql-server,union,unpivot,Sql,Sql Server,Union,Unpivot,在SQL Server中,我正在寻找在union select中重用值的最佳方法,以便在计算中使用这些值: 比如: 我知道的唯一方法是使用declare,比如: --------------------- declare @V1 as int declare @V2 as int select @V1 = max(value) @V2 = min(value) from table select @V1 union select @V2 union select @V1 + @V2 这是可
---------------------
declare @V1 as int
declare @V2 as int
select
@V1 = max(value)
@V2 = min(value)
from table
select @V1
union
select @V2
union
select @V1 + @V2
这是可行的,但不是有一种更简单的方法吗?在SQL Server中,我建议
交叉应用
将列解压到行:
select x.v
from (select min(value) v1, max(value) v2 from mytable) t
cross apply (values (t.v1), (t.v2), (t.v1 + t.v2)) x(v)
在SQL Server中,我建议
cross apply
取消将列拆分为行:
select x.v
from (select min(value) v1, max(value) v2 from mytable) t
cross apply (values (t.v1), (t.v2), (t.v1 + t.v2)) x(v)
使用返回最小值和最大值的CTE:
with cte as (select min(value) min_value, max(value) max_value from tablename)
select min_value from cte
union
select max_value from cte
union
select min_value + max_value from cte
使用返回最小值和最大值的CTE:
with cte as (select min(value) min_value, max(value) max_value from tablename)
select min_value from cte
union
select max_value from cte
union
select min_value + max_value from cte
您可以使用STRING_SPLIT,因为它比pivot更好
declare @a as varchar
select @a=cast(min(value) as varchar)+','+cast(min(value)+max(value) as varchar)+','+cast(max(value) as varchar)
from tablename
SELECT value
FROM STRING_SPLIT(@a, ',' )
您可以使用STRING_SPLIT,因为它比pivot更好
declare @a as varchar
select @a=cast(min(value) as varchar)+','+cast(min(value)+max(value) as varchar)+','+cast(max(value) as varchar)
from tablename
SELECT value
FROM STRING_SPLIT(@a, ',' )
请用您正在运行的数据库标记您的问题:mysql、oracle、sqlserver?另外,请澄清您是有两个表(如第一个代码段中的表),还是只有一个表(如第二个代码块中的表)。如果最小值和最大值相同,将得到2行而不是3行。是-这种可能性非常小,但排序和重复删除只会降低查询效率。请用您正在运行的数据库标记您的问题:mysql、oracle、sqlserver?另外,请澄清您是有两个表(如第一个代码段中的表),还是只有一个表(如第二个代码块中的表)。如果最小值和最大值相同,将得到2行而不是3行。是-这种可能性非常小,但排序和重复删除只会降低查询效率。