我搞了个投票系统,人员字段号为NID,候选项目字段号为HID,每个人投票时只能投10票且不重复投同一候选项目,NID和被投项目ID都记录在一张表里面,现在我知道投票前10名的候选项目的HID号,我现在想通过那个两个字段的表查出谁能都投了这前10名的候选项目(这个我已经实现),现在的问题是怎么用查询语句实现得出哪个人投了这10个候选项目中的任意9项、8项、7项等,且项目名称也要

解决方案 »

  1.   


    declare @人员表 table (NID int,Name varchar(8))
    insert into @人员表
    select 1,'zhangsan' union all
    select 2,'lisi' union all
    select 3,'wangwu' union all
    select 4,'liuliu' union all
    select 5,'shenqi' union all
    select 6,'heiba' union all
    select 7,'laojiu'select * from @人员表declare @候选项目表 table (HID int,projectName varchar(6))
    insert into @候选项目表
    select 1,'项目a' union all
    select 2,'项目b' union all
    select 3,'项目c' union all
    select 4,'项目d' union all
    select 5,'项目e' union all
    select 6,'项目f' union all
    select 7,'项目g' union all
    select 8,'项目h' union all
    select 9,'项目i' union all
    select 10,'项目j' union all
    select 11,'项目k' union all
    select 12,'项目l' 
    select * from @候选项目表declare @投票表 table(id int identity(1,1),NID int,HID int)
    insert into @投票表(NID.HID)
    select 1,2 UNION ALL
    SELECT 1,3 UNION ALL
    SELECT 1,5 UNION ALL
    SELECT 1,6 UNION ALL
    SELECT 1,8 UNION ALL
    SELECT 2,8 UNION ALL
    SELECT 2,9 UNION ALL
    SELECT 3,10 UNION ALL
    SELECT 3,8 UNION ALL
    SELECT 4,8 UNION ALL
    SELECT 4,9 UNION ALL
    SELECT 5,8 UNION ALL
    SELECT 6,8
    SELECT * FROM @投票表
      

  2.   


    declare @人员表 table (NID int,Name varchar(8))
    insert into @人员表
    select 1,'zhangsan' union all
    select 2,'lisi' union all
    select 3,'wangwu' union all
    select 4,'liuliu' union all
    select 5,'shenqi' union all
    select 6,'heiba' union all
    select 7,'laojiu'declare @候选项目表 table (HID int,projectName varchar(6))
    insert into @候选项目表
    select 1,'项目a' union all
    select 2,'项目b' union all
    select 3,'项目c' union all
    select 4,'项目d' union all
    select 5,'项目e' union all
    select 6,'项目f' union all
    select 7,'项目g' union all
    select 8,'项目h' union all
    select 9,'项目i' union all
    select 10,'项目j' union all
    select 11,'项目k' union all
    select 12,'项目l' declare @投票表 table(id int identity(1,1),NID int,HID int)
    insert into @投票表(NID,HID)
    select 1,2 UNION ALL
    SELECT 1,3 UNION ALL
    SELECT 1,5 UNION ALL
    SELECT 1,6 UNION ALL
    SELECT 1,8 UNION ALL
    SELECT 2,8 UNION ALL
    SELECT 2,9 UNION ALL
    SELECT 3,10 UNION ALL
    SELECT 3,8 UNION ALL
    SELECT 4,8 UNION ALL
    SELECT 4,9 UNION ALL
    SELECT 5,8 UNION ALL
    SELECT 6,8--投票前10名的项目
    SELECT B.* FROM (
    SELECT TOP 10 HID,COUNT(HID) AS COU FROM @投票表 GROUP BY HID
    ) A
    LEFT JOIN @候选项目表 B ON A.HID=B.HID
    ORDER BY A.COU DESC
    /*
    HID         projectName
    ----------- -----------
    8           项目h
    9           项目i
    10          项目j
    2           项目b
    3           项目c
    5           项目e
    6           项目f
    */SELECT NID,count(NID) as 投了前10中的几个 FROM @投票表
    WHERE HID in(
    select HID from 
    (SELECT TOP 10 HID,COUNT(HID) AS COU FROM @投票表 GROUP BY HID)
    A )
    group by NID/*
    NID         投了前10中的几个
    ----------- -----------
    1           5
    2           2
    3           2
    4           2
    5           1
    6           1
    */