2013-07-19 98 views
0

我甚至不知道這是可能僅使用SQL但在這裏不用...SQL:從條件循環顯示結果

我有一個桌上足球的結果列表,每行是一根火柴包含來自該比賽的所有數據,我想循環通過每場比賽,獲得主隊,檢查他們的最後6場比賽,並且只顯示指定球隊在過去6場比賽的50%或更多中打入2球或更多球的比賽。

到目前爲止,我有這個,我只是不知道怎麼縫一起...

創建的所有遊戲列表,只返回主隊:

SELECT Date, Home 
FROM [FDATA].[dbo].[Goals] 
ORDER BY Date 

獲取最後6那支球隊的比賽:

SELECT TOP 6 * 
FROM [FDATA].[dbo].[Goals] 
WHERE Home = 'home from first query' AND Date <= 'date from first query' 
ORDER BY Date DESC 

然後檢查,如果球隊打進2個或更多進球的6場比賽中> = 50%,從第一個查詢,如果真的返回輸出行:

SELECT * 
FROM last query 
WHERE HomeGoals >= 2 
ORDER BY Date DESC 

道歉這個問題的粗糙,但我有點新手。

+0

如果被顯示在.NET,ColdFusion的,PHP數據等應用程序,它會更容易應用可能可以使用SQL,但是,使用該代碼的條件邏輯。 –

+0

是的,我在.net上試過它,但它太慢了,我希望純SQL會更快。 – user2096512

回答

0

使用只需要兩個查詢:

SELECT home, count(1) cnt 
FROM 
(
    SELECT TOP 6 G1.HomeGoals, G1.Home 
     FROM [FDATA].[dbo].[Goals] AS G1 
      LEFT OUTER JOIN 
      [FDATA].[dbo].[Goals] AS G2 ON 
      G1.Home = G2.HOME AND G1.Date <= G2.Date 
    ORDER BY G1.Date DESC  
) 
WHERE HomeGoals >= 2 
GROUP BY home 
HAVING count(1) >= 3 
+0

感謝您的回覆,但它不起作用。它說'家'和'家庭目標'是無效的列名稱(它們是正確的,它只是不是因爲某些原因而剔除它們) – user2096512

+0

你能列出更多關於你的表結構的信息嗎 –

+0

@ user2096512再試一次,我編輯過我的查詢 –