[英]how to convert rows to column based type filter without using sub-query
我有可以在类型列上过滤的大数据。 我可以使用自联接的子查询获取行数据并转换为列,但由于数据量大,使用子查询会花费大量时间。 我的表结构是这样的:
表A
Id | ItemName | Type
1 | Item1 | A
2 | Item2 | A
3 | Item3 | B
4 | Item4 | B
表B
Id | ItemDescTag | Ext
1 | ItemTag | A
4 | ItemTag | B
询问
Select ItemName,PurchaseOrdr.Quantity, PurchaseOrdr.PORate, PurchaseOrdr.CostAmount
from TableA its
left join (
select it.Id, it.Quantity,(it.CostAmount/it.Quantity)as PORate, it.CostAmount from TableA it
inner join Table B m on it.Type = convert(int ,m.Ext)
)as PurchaseOrdr on PurchaseOrdr.Id = its.Id
我需要另一种方法来摆脱这个 SUB-QUERY,因为我必须制作 10 个类似类型的 SUB-QUERY 才能获得所需的数据,而且由于有数百万条记录,它会减慢速度......
根据其他 10 个子查询的相似程度,您可以在 CTE 中提前查询所需的列,例如
;WITH PurchaseOrdr_CTE AS(
SELECT
it.Id,
it.Quantity,
it.CostAmount
FROM TableA it
JOIN TableB m
ON it.Type = convert(int ,m.Ext)
)
SELECT
ItemName,
PurchaseOrdr.Quantity
, (PurchaseOrdr.CostAmount/PurchaseOrdr.Quantity) AS PORate,
PurchaseOrdr.CostAmount
FROM TableA its
LEFT JOIN PurchaseOrdr_CTE PurchaseOrdr
ON its.Id = PurchaseOrdr.Id
在这个特定的例子中,我认为根本不需要两次引用 TableA。 但是您正在使用的实际查询可能有额外的列,逻辑未包含在帖子中。
it.Type = convert(int ,m.Ext) 转换会有一些开销。 如果可以使用一致的数据类型,那显然更好。
如果您正在处理数百万条记录并且这将是一个重要的查询,那么良好的覆盖索引将产生很大的影响。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.