= [] if target_none? || project_selected? conditions << "projects.name ILIKE :keyword" end if target_none? || customer_selected? scope = scope.joins(:customer) conditions << "customers.name ILIKE :keyword" end if target_none? || member_selected? conditions << <<~SQL EXISTS( SELECT * FROM memberships ms INNER JOIN members m ON m.id = ms.member_id WHERE ms.project_id = projects.id AND m.name ILIKE :keyword ) SQL end sql = "(#{conditions.join(" OR ")})" scope = scope.where(sql, keyword: "%#{keyword}%") end scope end (target_none?xxx_selected? ಠࣗͷprivateϝιου) ೖྗ͕͋Εݕࡧ݅ΛՃ ݕࡧ݅ΛORͰ࿈݁͠ whereʹSQLͱόΠϯυ ύϥϝʔλΛ͢
b.registered_on, b.charge_amount, NULL AS payment_amount FROM billings b INNER JOIN users u ON b.user_id = u.id WHERE b.registered_on BETWEEN :date_from AND :date_to <% if name.present? %> AND u.name LIKE :name <% end %> UNION ALL SELECT u.id, u.name, p.registered_on, NULL AS charge_amount, p.payment_amount FROM payments b INNER JOIN users u ON p.user_id = u.id WHERE p.registered_on BETWEEN :date_from AND :date_to <% if name.present? %> AND u.name LIKE :name <% end %> ) WITH۟ʢڞ௨ςʔϒϧࣜʣͰҰछͷϏϡʔΛ࡞Δ ٻใʢ্ʣͱೖۚใʢԼʣΛUNION͢Δ ը໘Ͱ໊લΛࢦఆ͞ΕͨΒ݅ΛՃ
registered_on AS "", charge_amount AS "ٻֹ", payment_amount AS "ೖֹۚ", SUM(charge_amount - payment_amount) OVER (PARTITION BY id ORDER BY registered_on) AS "ߴ" FROM all_data ORDER BY id, registered_on WindowؔͰྦྷੵΛܭࢉ લͷWITH۟Ͱ࡞ͬͨϏϡʔΛར༻
@result = @balance_report.result end # ... end <table> <tr> <% @result.fields.each do |field| %> <td> <%= field %> </td> <% end %> </tr> <% @result.each do |row| %> <tr> <% row.values.each do |value| %> <td> <%= value %> </td> <% end %> </tr> <% end %> </table> SQLͷ࣮ߦ݁ՌΛView͢ ໊߲ͱ֤ߦͷ߲Λग़ྗ
"ֹϑϥά", <%= without_tax = "TRUNC(CASE i.flag = 't' WHEN i.price / 2 ELSE i.price END)" %> AS "੫ൈՁ֨", <%= tax = "TRUNC(#{without_tax} * 0.08)" %> AS "ফඅ੫", <%= with_tax = "(#{without_tax} + #{tax})" %> AS "੫ࠐՁ֨", <%= amount_sum = "SUM(s.amount)" %> AS "ച্ຊ", <%= "#{with_tax} * #{amount_sum}" %> AS "ച্ֹ" FROM items i INNER JOIN sales s ON s.item_id = i.id WHERE s.reported_on BETWEEN :date_from AND :date_to GROUP BY i.id ORDER BY i.id ܭࢉࣜΛมʹ์ΓࠐΜͰ͍͘ ੫ࠐΈՁ֨ × ച্ຊ = ച্ֹͱಡΊΔ
SET completed = CASE billings.amount - p.amount WHEN 0 THEN 't' ELSE 'f' END FROM payments p WHERE p.billing_id = billings.id SQL result = ApplicationRecord.connection.execute(sql) # return updated row count result.cmd_tuples end end UPDATE + SELECTͰSQLΛ࡞ (ٻֹ - ೖֹۚ = 0ͳΒ ೖۚྃϑϥά͕true) SQLΛ࣮ߦ͠ɺߋ৽͞ΕͨߦΛฦ͢