Quote:
Originally Posted by JarlH
Something like this?
select id,
count(distinct case when fid = 1 and (value = 1 or value = 0) then 1
when fid = 2 and (value = 24 or value = 0) then 2
when fid = 3 and (value = 15000 or value = 0) then 3
when fid = 4 and (value = 3 or value = 0) then 4
when fid = 5 and (value = 3 or value = 0) then 5 end)
as cnt
from index where
(fid = 1 and (value = 1 or value = 0)) or
(fid = 2 and (value = 24 or value = 0)) or
(fid = 3 and (value = 15000 or value = 0)) or
(fid = 4 and (value = 3 or value = 0)) or
(fid = 5 and (value = 3 or value = 0))
group by id
order by cnt desc
SQL-99 compliant, using the non-core feature F561, "Full value expressions".
|
thank you so much for your suggestion,
I've already written a query some thing similar like this the query is
SELECT lid,
SUM(
CASE fid
WHEN 1 THEN
CASE li.value WHEN 1 THEN 1 WHEN 0 THEN 1 ELSE 0 END
WHEN 2 THEN
CASE li.value WHEN 24 THEN 1 WHEN 0 THEN 1 ELSE 0 END
WHEN 3 THEN
CASE li.value WHEN 15000 THEN 1 WHEN 0 THEN 1 ELSE 0 END
WHEN 4 THEN
CASE li.value WHEN 3 THEN 1 WHEN 0 THEN 1 ELSE 0 END
WHEN 5 THEN
CASE li.value WHEN THEN 1 WHEN 0 THEN 1 ELSE 0 END
END ) AS rank
FROM index
GROUP BY lid
ORDER BY rank DESC
