teradata,case-into-where子句

axkjgtzd  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(387)

在这件事上我需要帮助。我的条件不被接受。。。我知道where子句的情况很棘手,所以我想你可以放我出去。。。我在子查询中创建了一个字段,其中有一个over partition by,然后我将其放入主select。。。然后我需要应用下面的过滤器。。。它返回了一个错误,说b不存在,如果我只写b.cc=1,那么它会给我一个结果。。。有什么想法吗?提前谢谢

  1. SELECT
  2. B.*
  3. FROM
  4. (
  5. SELECT
  6. A.*,
  7. (Count(A.COD_ABI) Over (PARTITION BY A.COD_ABI, A.COD_KTO)) AS CC
  8. FROM (
  9. SELECT DISTINCT
  10. T2.COD_PRODT_SALDO,
  11. T2.COD_RESID_NPE,
  12. T2.COD_DIVISA_UIC,
  13. T2.COD_ABI,
  14. T2.COD_NDG,
  15. T2.COD_KTO,
  16. T2.COD_PAESE_UIC_NPE,
  17. T2.DAT_SCA,
  18. T2.DAT_ACC,
  19. T2.DAT_EST
  20. FROM
  21. (
  22. SELECT
  23. T1.COD_PRODT_SALDO
  24. ,T1.COD_RESID_NPE
  25. ,T1.COD_DIVISA_UIC
  26. ,T1.COD_ABI
  27. ,T1.COD_NDG
  28. ,'00753' ||T1.COD_PRODT_SALDO||T1.COD_CNTRT_SALDO AS COD_KTO
  29. ,T1.COD_CONTRATTO_SAL
  30. ,T1.COD_RIFER_ANNO
  31. ,T1.COD_RIFER_MESE
  32. ,T1.COD_RIFER_ANNO || T1.COD_RIFER_MESE AS COD_RIFER
  33. ,T1.COD_CONTB_ETR
  34. ,T1.DAT_EST
  35. ,T1.DAT_ACC
  36. ,T1.DAT_SCA
  37. ,T1.COD_PAESE_UIC_NPE
  38. FROM ES777A.VA_ES_DB_ANAGR_CONTO AS T1,
  39. ES777A.VE_BFD_PDC AS T2
  40. WHERE T1.TMS_INIZIO_VALIDITA <= T2.TMS_PDC
  41. AND T1.TMS_FINE_VALIDITA > T2.TMS_PDC
  42. AND T1.TMS_CANC_FISICA IS NULL
  43. AND T1.FLG_RIFACIMENTO = 0
  44. AND T1.COD_ABI = T2.COD_ABI
  45. AND T2.NOM_VISTA='VA_ES_DB_ANAGR_CONTO'
  46. AND T2.NUM_PERIO_RIF = 20200131
  47. AND T2.COD_PERIODICITA = 'G'
  48. AND T1.COD_PRODT_SALDO NOT IN ('1398' , '1698')
  49. AND T1.COD_PRODT_SALDO IN ('1801', '1803', '1901', '1903', '3301', '3304', '3311', '3401', '3411', '3421')
  50. )
  51. AS T2
  52. INNER JOIN
  53. (
  54. SELECT
  55. T1.COD_ABI,
  56. '00753'||T1.COD_PRODT_SALDO||T1.COD_CNTRT_SALDO AS COD_KTO,
  57. Max(T1.COD_RIFER_ANNO || COD_RIFER_MESE) AS MAX_COD_RIFER
  58. FROM ES777A.VA_ES_DB_ANAGR_CONTO AS T1,
  59. ES777A.VE_BFD_PDC AS T2
  60. WHERE
  61. T1.TMS_INIZIO_VALIDITA <= T2.TMS_PDC
  62. AND T1.TMS_FINE_VALIDITA > T2.TMS_PDC
  63. AND T1.TMS_CANC_FISICA IS NULL
  64. AND T1.FLG_RIFACIMENTO = 0
  65. AND T1.COD_ABI = T2.COD_ABI
  66. AND T2.NOM_VISTA = 'VA_ES_DB_ANAGR_CONTO'
  67. AND T2.NUM_PERIO_RIF = 20200131
  68. AND T2.COD_PERIODICITA = 'G'
  69. AND T1.COD_PRODT_SALDO NOT IN ('1398' , '1698')
  70. AND T1.COD_PRODT_SALDO IN ('1801', '1803', '1901', '1903', '3301', '3304', '3311', '3401', '3411', '3421')
  71. GROUP BY T1.COD_PRODT_SALDO,T1.COD_ABI,T1.COD_CNTRT_SALDO
  72. )
  73. AS T1
  74. ON ( T2.COD_ABI = T1.COD_ABI AND T2.COD_KTO = T1.COD_KTO AND T2.COD_RIFER = T1.MAX_COD_RIFER )
  75. WHERE
  76. ( T2.DAT_EST > '2019-11-02' OR T2.DAT_EST IS NULL ) -- -90GG
  77. AND ( T2.DAT_SCA > '2019-11-02' OR T2.DAT_SCA IS NULL ) -- -90GG
  78. )
  79. A
  80. )
  81. B
  82. WHERE b.cc =
  83. WHEN (B.CC > 1 AND B.DAT_EST IS NOT NULL) THEN 1
  84. WHEN (B.CC > 1 AND B.DAT_EST IS NULL) THEN 0
  85. WHEN (B.CC = 1) THEN 1 ELSE 0
  86. END
9rnv2umw

9rnv2umw1#

这回答了问题的原始版本。
在teradata中,可以将逻辑简化为:

  1. SELECT ...,
  2. Count(A.COD_ABI) Over (PARTITION BY A.COD_ABI, A.COD_KTO) AS CC
  3. FROM A
  4. QUALIFY CC > 1 AND DATE_EST IS NOT NULL;

所有子查询都是不必要的

相关问题