>同步数据分配和检索

0kjbasz6  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(358)

我已经试了好几个小时了,但我真的找不到办法。我有一个mysql脚本,我需要迁移到ms sql 2014,但是,我似乎无法使它工作。据我所知,最大的问题是mysql允许这种指令:

  1. SELECT @row_number = @row_number + 1, hora_int FROM table1;

在检索数据的同时指定一个值,但是ms-sql没有。
我有一个比较大的剧本,有这个问题:

  1. SELECT GLOBAL.year, GLOBAL.month, '1111111' as metric_id, GLOBAL.margin as metric_value FROM (SELECT A.year,
  2. A.month,
  3. CASE
  4. WHEN A.month = 1 THEN (@csum_fdo := A.imp)
  5. ELSE (@csum_fdo := @csum_fdo + A.imp) END as margin
  6. FROM (SELECT Act.year, Act.month, Act.imp - Pas.imp as imp
  7. FROM (SELECT year(tie.date) as year, month(tie.date) as month, sum(importe) as imp
  8. FROM accounting con,
  9. dim_time tie,
  10. dim_account cta
  11. WHERE con.account_date = tie.date
  12. AND con.account = cta.nivel_10
  13. AND cta.level_id = '2'
  14. AND con.subtype_id <> 'O'
  15. GROUP BY year(tie.date),
  16. month(tie.date)) Act,
  17. (SELECT year(tie.date) as year, month(tie.date) as month, sum(importe) * -1 as imp
  18. FROM accounting con,
  19. dim_time tie,
  20. dim_account cta
  21. WHERE con.account_date = tie.date
  22. AND con.account = cta.nivel_10
  23. AND cta.level_id = '3'
  24. AND con.subtype_id <> 'O'
  25. GROUP BY year(tie.date),
  26. month(tie.date)) Pas
  27. WHERE Act.year = Pas.year
  28. AND Act.month = Pas.month) A,
  29. (SELECT @csum_fdo := 0) E) GLOBAL

有人能告诉我在mssql中重新创建代码需要做什么吗?提前谢谢大家

jfgube3f

jfgube3f1#

在sql server和(myql8+)中,使用窗口函数。相当于:

  1. SELECT @row_number = @row_number + 1, hora_int
  2. FROM table1
  3. ORDER BY col;

是:

  1. SELECT ROW_NUMBER() OVER (ORDER BY col), hora_int
  2. FROM table1;

如果您提供了示例数据和所需的结果,那么就更容易弄清楚您真正需要的函数。

ndasle7k

ndasle7k2#

我最大的问题在于:

  1. CASE
  2. WHEN A.month = 1 THEN (@csum_fdo := A.imp)
  3. ELSE (@csum_fdo := @csum_fdo + A.imp) END as margin

但正如戈登·林诺夫所指。这个问题可以通过窗口函数来解决,该函数的正确翻译是:

  1. SUM(A.imp) OVER(PARTITION BY A.Year ORDER BY A.month) as margin

结果比我想象的要容易
非常感谢,我希望它也能帮助其他人

相关问题