我正在尝试将查询调整为ruby on rails,在查询内部有一个带有from的子查询,我不知道如何将其调整为rails。原始查询如下:
SELECT B.Codigo, C.NombreCorto, B.Descripcion, B.HI, B.latitude, B.longitude, C.Direccion, ISNULL((SELECT SUM(TOTAL)
FROM Venta
WHERE RutaId=B.RutaId AND DiaO=B.DiaO AND CodCliente=B.Codigo AND Cancelada='0' AND TOTAL>0),0) AS TOTAL
FROM BitacoraTiempos B LEFT JOIN Clientes C ON C.IdCli=B.Codigo
WHERE B.RutaId='161' AND B.DiaO='893'
ORDER by B.HI
这是我到目前为止所做的改编:
def self.search_gps_venta(params)
query = select('[bitacoratiempos].Codigo,[bitacoratiempos].RutaId,[bitacoratiempos].Descripcion,[bitacoratiempos].HI,[bitacoratiempos].latitude,[clientes].NombreCorto AS c_nombre,[clientes].Direccion AS c_direccion')
.joins('left join clientes ON bitacoratiempos.Codigo=clientes.IdCli')
.where("(bitacoratiempos.RutaId = :rutaId or :rutaId = '') AND (bitacoratiempos.DiaO = :diaO or :diaO = '') AND (bitacoratiempos.IdEmpresa = :idempresa)",{rutaId: params[:search], diaO: params[:diaO]})
query
end
在控制器中我用这种方式称呼它:
def busqueda_gps_venta
@ventas = Bitacoratiempo.search_gps_venta(params)
respond_to do |format|
format.js
end
end
如何在我的rails中包含查询原始查询的这一部分:
SELECT B.Codigo, C.NombreCorto, B.Descripcion, B.HI, B.latitude, B.longitude, C.Direccion, ISNULL((SELECT SUM(TOTAL)
FROM Venta
WHERE RutaId=B.RutaId AND DiaO=B.DiaO AND CodCliente=B.Codigo AND Cancelada='0' AND TOTAL>0),0) AS TOTAL