是这要样的tab1表中原始数据
id datetime did nid
1 06-7-1 30 1
2 06-6-5 40 1
3 06-7-2 67 2
4 06-7-3 10 1
5 06-6-8 12 2
6 06-7-7 20 1tab2表中的原始数据
id vid name
1 2 aa
2 0 bb
3 1 cctab1和tab2是两个独立的表
tab1中
datetime 是访问日期
did 是点击次数
nid 是会员编号tab2中
id 是会员编号
vid 是会员级别
name 是会员名称其中tab1的nid和tab2中的id是对应的不知道,这样说的清楚不?现在要列出会员的7月点击排名,就像这样:排名 姓名 访问
1 bb 67
2 aa 60
这个我已经实现了现在又有新问题,就是根据tab2中vid的级别不同,将tab1中是did乘以不同的数值,然后再排出7月点击排名,如:
vid是0 那么sum(did)*2
vid是1 那么sum(did)*1
vid是2 那么sum(did)*3现在想用一条sql语句实现,该怎么办啊???
sql里有这样的语句么,就像if vid =0 then sum(did)*2 elseif vid=1 then sum(did)*1 end if
id datetime did nid
1 06-7-1 30 1
2 06-6-5 40 1
3 06-7-2 67 2
4 06-7-3 10 1
5 06-6-8 12 2
6 06-7-7 20 1tab2表中的原始数据
id vid name
1 2 aa
2 0 bb
3 1 cctab1和tab2是两个独立的表
tab1中
datetime 是访问日期
did 是点击次数
nid 是会员编号tab2中
id 是会员编号
vid 是会员级别
name 是会员名称其中tab1的nid和tab2中的id是对应的不知道,这样说的清楚不?现在要列出会员的7月点击排名,就像这样:排名 姓名 访问
1 bb 67
2 aa 60
这个我已经实现了现在又有新问题,就是根据tab2中vid的级别不同,将tab1中是did乘以不同的数值,然后再排出7月点击排名,如:
vid是0 那么sum(did)*2
vid是1 那么sum(did)*1
vid是2 那么sum(did)*3现在想用一条sql语句实现,该怎么办啊???
sql里有这样的语句么,就像if vid =0 then sum(did)*2 elseif vid=1 then sum(did)*1 end if
可以实现你说的
from tab1 a, tab2 b
where a.nid = b.id
SELECT TOP 50 a.nid, b.name,
SUM(a.did) * (case b.vid when 0 then 2 when 1 then 1 when 2 then 3 end)
FROM tab1 a INNER JOIN tab2 b ON a.nid = b.id
WHERE (DATEDIFF(m, a.datetime, GETDATE()) = 0)
GROUP BY a.nid, b.name, b.vid
ORDER BY SUM(a.did) * (case b.vid when 0 then 2 when 1 then 1 when 2 then 3 end) DESC或者把sum的后括号换个地方
SELECT TOP 50 a.nid, b.name,
SUM(a.did * (case b.vid when 0 then 2 when 1 then 1 when 2 then 3 end))
FROM tab1 a INNER JOIN tab2 b ON a.nid = b.id
WHERE (DATEDIFF(m, a.datetime, GETDATE()) = 0)
GROUP BY a.nid, b.name, b.vid
ORDER BY SUM(a.did) * (case b.vid when 0 then 2 when 1 then 1 when 2 then 3 end) DESC
SELECT TOP 50 a.nid, b.name,
SUM(a.did) * (case b.vid when 0 then 2 when 1 then 1 when 2 then 3 end)
FROM tab1 a INNER JOIN tab2 b ON a.nid = b.id
WHERE (DATEDIFF(m, a.datetime, GETDATE()) = 0)
GROUP BY a.nid, b.name, b.vid
ORDER BY SUM(a.did) * (case b.vid when 0 then 2 when 1 then 1 when 2 then 3 end) DESC或者把sum的后括号换个地方
SELECT TOP 50 a.nid, b.name,
SUM(a.did * (case b.vid when 0 then 2 when 1 then 1 when 2 then 3 end))
FROM tab1 a INNER JOIN tab2 b ON a.nid = b.id
WHERE (DATEDIFF(m, a.datetime, GETDATE()) = 0)
GROUP BY a.nid, b.name --改一下,第二个这里不应该要, b.vid
ORDER BY SUM(a.did) * (case b.vid when 0 then 2 when 1 then 1 when 2 then 3 end) DESC
用这个
SELECT TOP 50 a.nid, b.name,
SUM(a.did * (case b.vid when 0 then 2 when 1 then 1 when 2 then 3 end))
FROM tab1 a INNER JOIN tab2 b ON a.nid = b.id
WHERE (DATEDIFF(m, a.datetime, GETDATE()) = 0)
GROUP BY a.nid, b.name
ORDER BY SUM(a.did * (case b.vid when 0 then 2 when 1 then 1 when 2 then 3 end)) DESC
谢谢dulei115(前途无亮)