程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了T SQL-雄辩地替换相关子查询大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决T SQL-雄辩地替换相关子查询?

开发过程中遇到T SQL-雄辩地替换相关子查询的问题如何解决?下面主要结合日常开发的经验,给出你关于T SQL-雄辩地替换相关子查询的解决方法建议,希望对你解决T SQL-雄辩地替换相关子查询有所启发或帮助;

我会通过CTE来做到这一点:

WITH Result AS
(
  SELECT Row_number() OVER (PARTITION BY ItemID, Year
ORDER BY ItemversionID desc) AS Rownumber
      ,ItemID
      ,ItemversionID
      ,Year
      ,Value
  FROM table
)
SELECT ItemID
  ,ItemversionID
  ,Year
  ,Value
FROM Result
WHERE Rownumber = 1
ORDER BY ItemID, Year

解决方法

我有一个查询,当前正在使用相关子查询来返回结果,但是我认为可以使用ROW_numbER()更雄辩地解决问题。

问题围绕着值v的分布,通过项的年数。每个项目都有多个版本,每个版本都有自己的配置文件,在引入版本时即会启动,当前数据如下所示:

ItemId ItemVersionId年份值
==========================================
1 1 01 0.1
1 1 02 0.1
1 1 03 0.2
1 1 04 0.2
1 1 05 0.2
1 1 06 0.3
1 1 07 0.3
1 1 08 0.4
1 2 04 0.3
1 2 05 0.3
1 2 06 0.3
1 2 07 0.4
1 2 08 0.5
1 3 07 0.6
1 3 08 0.7
2 1 01 0.1
2 1 01 0.1
2 1 01 0.2
等等

我想使用适用的最新版本返回商品的完整资料。对于项目1的上述示例:

ItemId ItemVersionId年份值
==========================================
1 1 01 0.1
1 1 02 0.1
1 1 03 0.2
1 2 04 0.3
1 2 05 0.3
1 2 06 0.3
1 3 07 0.6
1 3 08 0.7

我目前正在使用

SELECT ItemId,ItemVersionId,Year,Value
FROM table t
WHERE
    ItemId = 1
    AND ItemVersionId = (SELECT MAX(ItemVersionId) FROM table WHERE ItemId = t.ItemId AND Year = t.Year)

尽管这会返回正确的值,但我怀疑有一种更有效的方法来执行此操作,尤其是在表变大时。

我正在使用sqL Server 2005。

提前致谢

大佬总结

以上是大佬教程为你收集整理的T SQL-雄辩地替换相关子查询全部内容,希望文章能够帮你解决T SQL-雄辩地替换相关子查询所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。