如果不使用临时表,如何编写此sql查询?

f1tvaqid  于 2021-08-01  发布在  Java
关注(0)|答案(1)|浏览(404)

我很难在powerbi中运行这个查询,因为它使用了一个临时表。没有临时表我怎么写这个?

  1. SELECT Convert(varchar,TT1.POST_DATE,110) as 'POST_DATE',
  2. COUNT (DISTINCT TT1.TRAN_DATE) as 'NO_DAYS_ENTERED',
  3. HP4.EMPLOYEE_CODE,
  4. HP4.EMPLOYEE_NAME,
  5. HP4.EMPLOYEE_NAME + ' (' + LEFT(HB6.OFFC_DESC,3) + ')' as 'EMPLOYEE_NAME_2',
  6. TT1.OFFC,
  7. HB6.OFFC_DESC,
  8. HP4.GRAD_YEAR,
  9. TB1.RANK_CODE,
  10. TR1.RANK_DESC
  11. into #tempG1
  12. FROM TAT_TIME TT1
  13. LEFT JOIN HBM_PERSNL HP4 ON TT1.TK_EMPL_UNO = HP4.EMPL_UNO
  14. INNER JOIN TBM_PERSNL TB1 on HP4.EMPL_UNO = TB1.EMPL_UNO
  15. INNER JOIN TBL_RANK TR1 on TB1.RANK_CODE = TR1.RANK_CODE
  16. INNER JOIN HBL_OFFICE HB6 on HP4.OFFC = HB6.OFFC_CODE
  17. WHERE TB1.RANK_CODE IN ('4')
  18. AND HP4.INACTIVE = 'N'
  19. AND TT1.POST_DATE >= DATEADD(month, -3, GETDATE())
  20. GROUP BY TT1.POST_DATE, HP4.EMPLOYEE_CODE, HP4.GRAD_YEAR, HP4.EMPLOYEE_NAME, TT1.OFFC, TB1.RANK_CODE, TR1.RANK_DESC, HB6.OFFC_DESC
  21. select G1.EMPLOYEE_NAME,
  22. G1.EMPLOYEE_NAME_2,
  23. datediff(day, min(G1.POST_DATE), max(G1.POST_DATE)) * 1.0 / nullif(count(*) - 1, 0) as 'AVG_FREQ'
  24. from #tempG1 G1
  25. group by G1.EMPLOYEE_NAME, G1.EMPLOYEE_NAME_2
  26. drop table #tempG1
lh80um4z

lh80um4z1#

您需要在主sql中将#tempg1查询作为内联视图引用。试试这个-

  1. select G1.EMPLOYEE_NAME,
  2. G1.EMPLOYEE_NAME_2,
  3. datediff(day, min(G1.POST_DATE), max(G1.POST_DATE)) * 1.0 / nullif(count(*) - 1, 0) as 'AVG_FREQ'
  4. from (SELECT Convert(varchar,TT1.POST_DATE,110) as 'POST_DATE',
  5. COUNT (DISTINCT TT1.TRAN_DATE) as 'NO_DAYS_ENTERED',
  6. HP4.EMPLOYEE_CODE,
  7. HP4.EMPLOYEE_NAME,
  8. HP4.EMPLOYEE_NAME + ' (' + LEFT(HB6.OFFC_DESC,3) + ')' as 'EMPLOYEE_NAME_2',
  9. TT1.OFFC,
  10. HB6.OFFC_DESC,
  11. HP4.GRAD_YEAR,
  12. TB1.RANK_CODE,
  13. TR1.RANK_DESC
  14. FROM TAT_TIME TT1
  15. LEFT JOIN HBM_PERSNL HP4 ON TT1.TK_EMPL_UNO = HP4.EMPL_UNO
  16. INNER JOIN TBM_PERSNL TB1 on HP4.EMPL_UNO = TB1.EMPL_UNO
  17. INNER JOIN TBL_RANK TR1 on TB1.RANK_CODE = TR1.RANK_CODE
  18. INNER JOIN HBL_OFFICE HB6 on HP4.OFFC = HB6.OFFC_CODE
  19. WHERE TB1.RANK_CODE IN ('4')
  20. AND HP4.INACTIVE = 'N'
  21. AND TT1.POST_DATE >= DATEADD(month, -3, GETDATE())
  22. GROUP BY TT1.POST_DATE, HP4.EMPLOYEE_CODE, HP4.GRAD_YEAR, HP4.EMPLOYEE_NAME, TT1.OFFC, TB1.RANK_CODE, TR1.RANK_DESC, HB6.OFFC_DESC
  23. ) G1
  24. group by G1.EMPLOYEE_NAME, G1.EMPLOYEE_NAME_2
展开查看全部

相关问题