21 Ekim 2011 Cuma

MySQL Group_Concat ile sum,min,max vs. function kullanmak

Çok basit, çok karmaşık sorunları bile aşağıdaki gibi çözebilirsiniz.

Mantık olarak ana sql de istediğiniz sonucu almak için joinler içinde ara işlemlerinizi yapıyorsunuz...


SELECT
CONCAT(rt.Name, '(', rtt.Name , ')') as Name,
r.HotelId,
r.RoomTypeId,
r.RateId,
GROUP_CONCAT( DISTINCT CONCAT_WS('-',
r.BDate,
CASE WHEN r.Quantity IS NULL THEN 'null' ELSE r.Quantity END,
r.RoomId,
CASE WHEN rr.Quantity IS NULL THEN 0 ELSE (rr.Quantity) END,
CASE WHEN r.IsClosed IS NULL THEN '' ELSE r.IsClosed END
) SEPARATOR ',') as Availibility
FROM
view_ratetranslate rtt
INNER JOIN Rooms r
ON r.RateId = rtt.RateId
LEFT JOIN view_roomtypetranslate rt
ON rt.RoomTypeId = r.RoomTypeId
AND rt.LngIsDefault = 1
LEFT JOIN (
SELECT RoomId, SUM(Quantity) as Quantity FROM Reserved_Rooms
GROUP BY RoomId
) as rr
ON rr.RoomId = r.RoomId
WHERE
rtt.LngIsDEfault = 1
AND r.HotelId = 1
AND r.BDate >= '2011-10-23' AND r.BDate <= '2011-10-25'
AND r.RoomId = 1032
GROUP BY r.RateId, r.RoomTypeId ;


Burda işi bitiren kod ;

LEFT JOIN (
SELECT RoomId, SUM(Quantity) as Quantity FROM Reserved_Rooms
GROUP BY RoomId
) as rr

Hiç yorum yok: