是这要样的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

解决方案 »

  1.   

    sum(did) * (case vid when 0 then 2 when 1 then 1 when 2 then 3 end)
      

  2.   

    先顶,我是要再asp里实现,急啊,老板真黑啊,出了这么个题
      

  3.   

    case when  
    可以实现你说的
      

  4.   

    select a.id , b.name , sum(a.did)*b.vid as did 
    from tab1 a, tab2 b
    where a.nid = b.id
      

  5.   

    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不行啊,他说b.vid不在聚合函数中
      

  6.   

    那你就把b.vid加到group bu中去
    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
      

  7.   

    那你就把b.vid加到group bu中去
    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
      

  8.   

    谢谢各位咯!!
    用这个
    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(前途无亮)