【发布时间】:2020-11-18 12:19:27
【问题描述】:
我有一个包含多个自连接的查询:
SELECT t2.Name, t2.Date as date, t2.Value as value1, t3.Value as value2, t4.Value as value3
FROM table_t t1
RIGHT JOIN #tempPredefinedIndicators t2
ON t1.Name = t2.Name
JOIN #tempPredefinedIndicators t3
ON t2.Name = t3.Name AND t2.Date = t3.Date
JOIN #tempPredefinedIndicators t4
ON t2.Name = t4.Name AND t2.Date = t4.Date
WHERE t1.ValueName = 'one' AND DATEDIFF(year, ISDATE(t1.Value), GETDATE()) >=10
AND (t2.ValueName = 'two' AND TRY_CONVERT(FLOAT, t2.Value) > 0.15)
AND (t3.ValueName = 'three' AND TRY_CONVERT(FLOAT, t3.Value) BETWEEN 0 AND 0.5)
AND (t4.ValueName = 'four' AND TRY_CONVERT(FLOAT, t4.Value) > 0.15)
这是一个示例表,其中我用黄色标记了 where 条件边界内的记录:
这是预期的结果视图:
基本上我用几个连续的条件过滤一个表,并将结果显示为一个表。
有没有办法,使用窗口函数或子查询将其转换为更快?
【问题讨论】:
-
请提供样本数据和期望的结果。描述查询应该做什么。
-
似乎您正在使用数据透视/条件聚合; Stack Overflow 上有 100 个这样的例子。
-
我已经编辑了我的问题,以更好地阐明我在寻找什么。
标签: sql tsql subquery window-functions self-join