我有一个名为factprojection的表,该表具有如图中所示的列。
我想将“度量”列中具有“总行数和要求的RSV”的“值”列乘以“度量”列中具有“线平均值”的“值”列,按乘员类型将其连接。我应该创建一个临时表然后执行乘法吗?有人可以帮我吗?
答案 0 :(得分:0)
我假设所有/
和CrewType
值都在两个表中,所以下面的所有答案都使用内部联接(任何不匹配的行都不会返回)
您可以定义在表上执行查询的通用表表达式,然后为这些查询命名。然后,您可以加入这些“子表”,而不是生成任何临时数据:
DateKey
一种等效但在视觉上不太明显的方法是自联接,为表赋予不同的别名:
WITH LineAverage as (
select *
from factprojection
where Measure = 'Line Average'
)
,TotalLines as (
select *
from factprojection
where Measure = 'Total Lines & RSV Required'
)
select
LA.CrewType
,LA.DateKey
,LA.Value*TL.Value as newvalue
from LineAverage LA
inner join
TotalLines TL
ON LA.DateKey = TL.DateKey
and LA.CrewType = TL.CrewType
请注意,select
LA.CrewType
,LA.DateKey
,LA.Value*TL.Value as newvalue
from factprojection LA,
factprojection TL
where LA.DateKey = TL.DateKey
and LA.CrewType = TL.CrewType
and LA.Measure = 'Line Average'
and TL.Measure = 'Total Lines & RSV Required'
子句中的连接条件以及对Measure
值的限制。尽管此查询的编写时间短一些,但与CTE方法相比,它会失去一些可读性。
这里我还使用了WHERE
的逗号形式,其中INNER JOIN
子句被放置在ON
子句中的联接条件所代替。