2009-09-23 37 views
0

让我试着解释这对我最大的能力:SQL查询需要获得用户,其中,节目栏包括某些程序

我有一个表,其中有一个用户ID列和程序列(连同其他栏目不重要)。我需要找到具有此表,其中该用户具有与它相关联X的程序内的多个实例此表中的用户。

任何人都可以帮助我吗?

我至今是:

SELECT 
      WPP.USERID 
     FROM 
      WEBPROGRAMPARTICIPANTS WPP 
     INNER JOIN 
      WEBPROGRAMS WP 
     ON 
      WPP.PROGRAMCODE = WP.PROGRAMCODE 
     WHERE 
      CONFIRMED = 1 AND 
      WP.PROGRAMTYPE IN ('1') AND 
      WP.PROGRAMSTARTDATE >= '2000-01-01' AND 
      WPP.PROGRAMCODE = 'CL2010' 
     GROUP BY 
      WPP.USERID 
     HAVING 
      COUNT(WPP.PROGRAMCODE) > 1 

回答

1
DECLARE @Program VARCHAR(MAX) 

SET @Program = 'X' 

SELECT UserID, COUNT(Program) Duplicates 
FROM Table 
WHERE Program = @Program 
AND COUNT(Program) > 1 
GROUP BY UserID 
0

我认为所有的丢失是wpp.programcode集团具有良好的

SELECT 
         WPP.USERID 
       FROM 
         WEBPROGRAMPARTICIPANTS WPP 
       INNER JOIN 
         WEBPROGRAMS WP 
       ON 
         WPP.PROGRAMCODE = WP.PROGRAMCODE 
       WHERE 
         CONFIRMED = 1 AND 
         WP.PROGRAMTYPE IN ('1') AND 
         WP.PROGRAMSTARTDATE >= '2000-01-01' AND 
         WPP.PROGRAMCODE = 'CL2010' 
       GROUP BY 
         WPP.USERID , WPP.PROGRAMCODE 
       HAVING 
         COUNT(WPP.PROGRAMCODE) > 1 

如果你不希望限制它的程序代码cl2010从where子句中删除它。我还要补充wpp.programcode你选择列表,所以你可以看到代码复制什么,计数(wpp.programcode)如果你想看看有多少次。

+0

我需要CL2010的的程序代码,因为我想找到谁已经attanded复式程序,包括程序 – mattgcon 2009-09-23 22:03:43

+0

这很好的用户,但它也会限制你该程序 – Gratzy 2009-09-23 22:23:11

0

你可能将不得不因为一旦你在where子句限制你的结果到一个特定的节目类型在增加,你只能找到谁有一个程序的多个行参与者要做到这一点作为一个子查询类型。您可能正在寻找类似这样的东西:

SELECT 
    WPP.USERID 
FROM 
    WEBPROGRAMPARTICIPANTS WPP 
INNER JOIN 
    WEBPROGRAMS WP ON WPP.PROGRAMCODE = WP.PROGRAMCODE 
WHERE 
    CONFIRMED = 1 AND 
    WP.PROGRAMTYPE IN ('1') AND 
    WP.PROGRAMSTARTDATE >= '2000-01-01' AND 
    WPP.PROGRAMCODE = 'CL2010' 
    WPP.USERID IN (
     SELECT 
      WPP.USERID 
     FROM 
      WEBPROGRAMPARTICIPANTS WPP 
     GROUP BY 
      WPP.USERID 
     HAVING 
      COUNT(WPP.PROGRAMCODE) > 1) 
GROUP BY 
    WPP.USERID 
+0

我想这个建议了,但是,它返回超过预期 – mattgcon 2009-09-23 22:05:28

+1

你是什么意思归国超过预期?多个USERID的返回或USERIDS与您的条件不符?我想你可能有第一个错误,我可以看到为什么我正在更新来解决这个问题。 – 2009-09-23 22:26:59

0

我假定即使您知道它们存在,它也没有发现任何重复。有了您的查询,如果您的重复有不同的类型,代码或2000-1-1前开始日期,那么这些记录将被运行您的计数之前过滤掉。请记住,它将在流程的早期应用“where”。

保持这个处理顺序记:http://tinman.cs.gsu.edu/~raj/sql/node22.html