2013-10-11 101 views
0

我确信之前已经回答了这个问题,但我无法找到正确的术语来搜索以找到我的答案。针对两个不同查询中的行值的SQL查询

我有一个表,如:

USERNAME  ACTIONNUM  VALUE1  VALUE2 
--------  ----------  ------  ------ 
Person1  Action1    0   1 
Person1  Action1    1   1 
Person1  Action1    1   1 
Person1  Action2    0   1 
Person1  Action2    1   1 
Person2  Action3    0   1 
Person2  Action3    1   1 
Person3  Action4    1   1 

对于这个例子,我想为VALUE1和VALUE2 0,1执行一次搜索,让我刚刚的用户名。所以第一次搜索会给:Person1,Person2。

然后,第二次搜索应该给我一个独特的动作号并计算动作对于值1,1存在的次数,但是只给出在第一次搜索中找到USERNAME的行。

因此,对于这个例子,我想查询返回:

USERNAME  ACTIONNUM  COUNT 
--------  ----------  ----- 
Person1  Action1   2 
Person1  Action2   1 
Person2  Action3   1 

所以Person3可能被跳过,因为Person3可能没有得到从第一搜索返回

+0

你尝试过什么了吗? –

+0

因此,在特定操作中“VALUE1 = 0 AND VALUE2 = 1”是否为真并不重要?只要它存在一次给定的'USERNAME'? – Orbling

+0

我对SQL很陌生,所以我一直在尝试的东西甚至没有返回任何东西。我基本上可以单独执行每个查询,因此我可以返回不同的用户名或actionnum的每个实例。我还没有找到任何简单的解决方案来以我想要的方式合并这些结果。 – user2871467

回答

1

您可在从子查询中使用:

select * from table where value1 = 1 and value2 = 1 and username in (
select username from table where value1 = 0 and value2 = 1 
) 
+0

这已经解决了它!它把我想要的清单合并在一起,希望我能解决其余的问题。 – user2871467

1

更改这个答案,我误解了部分问题。

SELECT username, actionnum, (select count(actionnum) 
          from test1 b 
          where b.value1=1 
          and b.value2=1 
          and b.username = a.username 
          and b.actionnum = a.actionnum) 
FROM test1 a 
WHERE value1 = 0 AND value2 = 1 
order by 1, 2; 

看到sqlfiddle

1

尝试是这样的

Select 
    UserName 
, ActionNum 
, Count(*) As Cnt 
From MyTable 
    Where Value1 = 1 
     And Value2 = 1 
     And UserName In 
     ( 
      Select Distinct UserName 
      From MyTable 
      Where Value1 = 0 
       And Value2 = 1 
     ) 
Group By 
    UserName 
, ActionNum 
+1

也许需要一个“GROUP BY”? – Orbling

+1

哎呀,谢谢,@Orbling。 Corercted。 – asantaballa

+0

现在看来对我来说是正确的,据我所知,这个问题。虽然目前还不清楚是什么。 – Orbling

0

你可以尝试像..

SELECT 
    table.USERNAME, 
    table.ACTIONNUM, 
    COUNT(table.ACTIONNUM) as ACTIONNUMCOUNT 
FROM 
    table 
WHERE 
    table.VALUE1 = 1 
    AND 
    table.VALUE2 = 1 
    AND 
    USERNAME IN 
       (
        SELECT DISTINCT USERNAME FROM table where value1 = 0 and value2 = 1 
       ) 
GROUP BY 
    table.ACTIONNUM