Advertisement
Guest User

Untitled

a guest
May 25th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.31 KB | None | 0 0
  1. Ошибка:
  2. org.postgresql.util.PSQLException: ERROR: column t.nomenclaturecode does not exist Hint: Perhaps you meant to reference the column "t.nomenclatureCode" or the column "t.nomenclatureCode". Position: 3278 at
  3.  
  4.  
  5.  
  6. SQL:
  7.  
  8. <![CDATA[WITH dates AS (
  9. SELECT
  10. $P{start_date_required}::TIMESTAMP - INTERVAL '3 hours' AS "begin", -- convert to MSK TZ
  11. $P{end_date_required}::TIMESTAMP + INTERVAL '21 hours' AS "end"
  12. ),
  13.  
  14. -- точки продажи, по которым берутся данные
  15. endpoints AS (
  16. SELECT e.id, e.client
  17. FROM "Endpoints" e
  18. JOIN "Clients" p ON p.id = e.client AND p.deleted = FALSE AND p.status = 'active'
  19. WHERE e.deleted = FALSE
  20. AND e.status = 'active'
  21. AND (p.data ->> 'participatesInCampaigns') = 'true'
  22. AND coalesce(coalesce(e.data, '{}'::JSONB) ->> 'excludedFromCampaigns', 'false') <> 'true'
  23. AND ($P{campaigns_endpoints_manual} IS NULL OR $X{IN, lower(e.id::VARCHAR), campaigns_endpoints_manual})
  24. ),
  25.  
  26. -- Точки продажи, для которых данные берутся из заказов
  27. -- (не выгружают обороты или есть какие-то проблемы).
  28. manual_order_endpoints AS (
  29. SELECT e.id
  30. FROM endpoints e
  31. WHERE NOT EXISTS(
  32. SELECT 1
  33. FROM dates
  34. JOIN "NomenclatureTurnovers" nt ON nt.endpoint = e.id
  35. AND nt."date" >= dates.begin AND nt."date" < dates.end
  36. )
  37. AND ($P{campaigns_endpoints_manual} IS NULL OR $X{IN, lower(e.id::VARCHAR), campaigns_endpoints_manual})
  38. ),
  39.  
  40. -- Точки продажи, для которых данные берутся из оборотов
  41. -- (все точки минус точки по заказам)
  42. turnover_endpoints AS (
  43. SELECT
  44. endpoints.*
  45. FROM endpoints
  46. WHERE NOT EXISTS(SELECT 1 FROM manual_order_endpoints WHERE manual_order_endpoints.id = endpoints.id)
  47. ),
  48.  
  49. -- Препараты производителя
  50. goods AS (
  51. SELECT
  52. turn."nomenclatureCode" AS "nomenclatureCode",
  53. mg."EAN",
  54. max(mg.title) AS title,
  55. avg(nullif(p.price, 1))::NUMERIC(20, 2) AS price,
  56. (
  57. SELECT avg(pp.price)::NUMERIC(20, 2)
  58. FROM "ResellerGoods" rg
  59. JOIN "Clients" c ON
  60. rg.reseller = c.id AND
  61. c."countryCode" = 'RU' AND
  62. c.status = 'active' AND
  63. c.type = 'reseller'
  64. JOIN "Lots" ll ON ll.good = rg.id AND ll.deleted = FALSE
  65. JOIN "Prices" pp ON pp.lot = ll.id AND pp.deleted = FALSE
  66. WHERE rg."EAN" = mg."EAN"
  67. ) AS "avgPrice"
  68. FROM "ResellerGoods" mg
  69. JOIN "Turnovers" turn on turn."EAN"=mg."EAN"
  70. JOIN "Lots" l ON l.good = mg.id AND l.deleted = FALSE
  71. JOIN "Prices" p ON p.lot = l.id AND p.deleted = FALSE
  72. WHERE mg.reseller = $P{manufacturer_single}::UUID
  73. AND mg."EAN" not like 'PH.%'
  74. AND ($P{manufacturers_goods} IS NULL OR $X{IN, mg."EAN", manufacturers_goods})
  75. GROUP BY mg."EAN", turn."nomenclatureCode"
  76. ),
  77.  
  78. turnovers_goods AS (
  79. SELECT
  80. nt.*,
  81. goods."nomenclatureCode",
  82. goods."EAN" AS goods_ean,
  83. goods.title AS goods_title,
  84. goods.price AS goods_price,
  85. goods."avgPrice" AS goods_avg_price
  86. FROM turnover_endpoints e
  87. JOIN goods ON TRUE
  88. JOIN dates ON TRUE
  89. JOIN "NomenclatureTurnovers" nt ON nt.endpoint = e.id
  90. AND nt."EAN" = goods."EAN"
  91. AND nt."date" >= dates.begin AND nt."date" < dates.END
  92. UNION ALL
  93. SELECT
  94. nt.*,
  95. goods."nomenclatureCode",
  96. goods."EAN" AS goods_ean,
  97. goods.title AS goods_title,
  98. goods.price AS goods_price,
  99. goods."avgPrice" AS goods_avg_price
  100. FROM turnover_endpoints e
  101. JOIN goods ON TRUE
  102. JOIN dates ON TRUE
  103. JOIN "Nomenclatures" n ON n.client = e.client AND n."clientEAN" = goods."EAN"
  104. JOIN "NomenclatureTurnovers" nt ON nt.endpoint = e.id
  105. AND nt."nomenclatureCode" = n.nomenclature
  106. AND nt."EAN" IS NULL
  107. AND nt."date" >= dates.begin AND nt."date" < dates.END
  108. ),
  109.  
  110. turnovers AS (
  111. SELECT
  112. endpoint,
  113. "date",
  114. reseller,
  115. "resellerCode",
  116. "EAN",
  117. "title",
  118. "incomeQuantity",
  119. income,
  120. "nomenclatureCode"
  121. FROM (
  122. SELECT
  123. t.nomenclatureCode,
  124. t.endpoint,
  125. t."date",
  126. r.title AS reseller,
  127. ntr."resellerCode",
  128. t.goods_ean AS "EAN",
  129. t.goods_title AS title,
  130. ntr."quantityDebit" AS "incomeQuantity",
  131. ntr."quantityDebit" * coalesce(t.goods_price, ntr."priceDebit", t.goods_avg_price) AS income,
  132. row_number() OVER (
  133. PARTITION BY
  134. t.endpoint,
  135. t."date",
  136. t."nomenclatureCode",
  137. t."EAN",
  138. t."quantityEnd",
  139. ntr."quantityDebit",
  140. ntr."resellerCode"
  141. )
  142. FROM turnovers_goods t
  143. JOIN "NomenclatureTurnoversResellers" ntr ON ntr."nomenclatureTurnover" = t.id
  144. JOIN "NomenclatureTurnoversSettings" nts ON nts.endpoint = t.endpoint AND nts."resellerCode" = ntr."resellerCode"
  145. JOIN "Clients" r ON r.id = nts.reseller
  146. WHERE (
  147. NOT EXISTS(
  148. SELECT 1
  149. FROM "ManufacturerResellers" mr
  150. WHERE mr.manufacturer = $P{manufacturer_single}::UUID
  151. ) OR EXISTS(
  152. SELECT 1
  153. FROM "ManufacturerResellers" mr
  154. WHERE mr.manufacturer = $P{manufacturer_single}::UUID AND mr.reseller = nts.reseller
  155. )
  156. )
  157. ) turnovers_with_duplicates
  158. WHERE row_number = 1
  159. ),
  160.  
  161. -- Данные по заказам
  162. order_endpoints AS (
  163. SELECT
  164. manual_order_endpoints.id AS endpoint,
  165. r.id AS reseller
  166. FROM manual_order_endpoints
  167. JOIN "Contracts" c ON c."buyerEndpoint" = manual_order_endpoints.id AND (c.status = 'approved' OR c.status = 'paused') AND c."resellerType" = 'reseller'
  168. JOIN "Clients" r ON r.id = c.seller
  169. GROUP BY manual_order_endpoints.id, r.id
  170. ),
  171.  
  172. orders AS (
  173. SELECT
  174. o.id,
  175. o.endpoint
  176. FROM dates
  177. JOIN "Orders" o ON o."dateSent" >= dates."begin" AND o."dateSent" < dates."end" AND o.status = 'sent'
  178. JOIN order_endpoints ON o.endpoint = order_endpoints.endpoint
  179. GROUP BY o.id, o.endpoint
  180. ),
  181.  
  182. order_turnovers as (
  183. SELECT
  184. goods.nomenclatureCode,
  185. orders.endpoint,
  186. oi."date",
  187. r.title AS reseller,
  188. goods."EAN",
  189. goods.title,
  190. oi.quantity AS "incomeQuantity",
  191. oi.quantity * coalesce(goods.price, oi.price, goods."avgPrice") AS income,
  192. t.nomenclatureCode
  193. FROM "OrderItems" oi
  194. JOIN "OrderResellers" ors ON oi."orderReseller" = ors.id
  195. JOIN "Clients" r ON r.id = ors.reseller
  196. JOIN orders ON orders.id = ors."order"
  197. JOIN goods ON goods."EAN" = coalesce(oi.offer ->> 'EAN', oi.offer ->> 'ean')
  198. WHERE oi.type = 'order'
  199. AND (
  200. NOT EXISTS(
  201. SELECT 1
  202. FROM "ManufacturerResellers" mr
  203. WHERE mr.manufacturer = $P{manufacturer_single}::UUID
  204. ) OR EXISTS(
  205. SELECT 1
  206. FROM "ManufacturerResellers" mr
  207. WHERE mr.manufacturer = $P{manufacturer_single}::UUID AND mr.reseller = r.id
  208. )
  209. )
  210. ),
  211.  
  212. union_turnovers as (
  213. SELECT
  214. turnovers.nomenclatureCode,
  215. turnovers.endpoint,
  216. turnovers."date",
  217. turnovers.reseller,
  218. turnovers."resellerCode",
  219. turnovers."title",
  220. turnovers."EAN",
  221. turnovers."incomeQuantity",
  222. turnovers.income
  223. FROM turnovers
  224. UNION ALL
  225. SELECT
  226. order_turnovers.nomenclatureCode,
  227. order_turnovers.endpoint,
  228. order_turnovers."date",
  229. order_turnovers.reseller,
  230. 'По нашим заказам' AS "resellerCode",
  231. order_turnovers."title",
  232. order_turnovers."EAN",
  233. order_turnovers."incomeQuantity",
  234. order_turnovers.income
  235. FROM order_turnovers
  236. )
  237.  
  238. SELECT
  239. union_turnovers.nomenclatureCode,
  240. m.title AS manufacturer,
  241. union_turnovers."EAN",
  242. union_turnovers.title,
  243. p.title AS client,
  244. e."legalTitle" || ', ' || e.incorporation AS endpoint,
  245. e.inn,
  246. e."physicalAddress" AS address,
  247. coalesce(sum(union_turnovers."incomeQuantity"), 0) AS "incomeQuantity",
  248. coalesce(sum(union_turnovers.income)::NUMERIC(20, 2), 0) AS income,
  249. union_turnovers.reseller,
  250. union_turnovers."resellerCode",
  251. to_char(union_turnovers."date" + INTERVAL '3 hours', 'MM.YYYY') AS "month"
  252. FROM endpoints
  253. LEFT JOIN union_turnovers ON union_turnovers.endpoint = endpoints.id
  254. JOIN "Endpoints" e ON e.id = endpoints.id
  255. JOIN "Clients" p ON p.id = e.client
  256. JOIN "Clients" m ON m.id = $P{manufacturer_single}::UUID
  257. $P!{show_empty_endpoints_sql}
  258. GROUP BY
  259. m.id,
  260. p.id,
  261. e.id,
  262. union_turnovers."EAN",
  263. union_turnovers.title,
  264. union_turnovers.reseller,
  265. union_turnovers."resellerCode",
  266. union_turnovers.nomenclatureCode,
  267. to_char(union_turnovers."date" + INTERVAL '3 hours', 'MM.YYYY')
  268. ORDER BY title, client, endpoint, address, "month";]]>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement