2013-10-11 130 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