2011-09-20 37 views
1

好的,這裏有兩個招生名單,其中一個是我確信這個問題已經得到解答,它與加入有關,第二個是我不確定爲什麼要寫當我不真正瞭解SQL時,它需要複雜的SQL。從結果集中解析ID

這是問題所在,很可能是蛋糕散步,但我似乎無法在這裏找到答案;

我有一個select從表中返回一個ID和一個項目的總和。我想把這個ID作爲實際的名字解決。

下面是查詢;

select top 10 
    sum(elapsedTimeSeconds) as et, AppID 
from UsersAppLog 
where userid = 1 
    and appid <> 7 
    and CreatedOn > '01 Sep 2011' 
group by 
    AppID 
order by 
    et desc 

所以我得到;

et, appid 

,我想基於返回appidwindowsapps查表「說明」。

任何幫助,將不勝感激。

Phil。

+0

我認爲你需要發佈「usersapplog」和「windowapps」表的模式。 – JohnD

回答

1

只需添加你需要查詢的列和GROUP BY子句:

SELECT TOP 10 
    SUM(u.elapsedTimeSeconds) AS et, u.AppID, wa.Description 
FROM dbo.UsersAppLog u 
INNER JOIN dbo.WindowsApps wa ON u.AppID = wa.AppID 
WHERE 
    u.userid = 1 
    AND u.appid <> 7 
    AND u.CreatedOn > '20110901'  -- use ISO-8601 format for extra safety! 
GROUP BY 
    u.AppID, wa.Description 
ORDER BY 
    et DESC 

不知道您的具體架構(這將有助於爲未來發布的那些東西!),我已經猜到你在WindowsApplications表的AppID,太 - 我已經假定所有的u.AppID會有一個正確的比賽 - 因此INNER JOIN

我也建議始終使用ISO-8601的日期格式(YYYYMMDD) - 這是唯一的辦法確保你的代碼不管區域/區域/語言設置的將工作在有問題的SQL Server計算機上。

+0

感謝這兩個快速反應!是的,你是對的,我應該包括模式。你的假設是正確的。 – philbird

+1

只是爲了重新執行以前的評論。感謝您的幫助。真的很感激。該解決方案運行良好,並進入我學習的關於如何通過您提供的上下文示例更好地使用SQL的bargin。再次。謝謝。無價。 – philbird

+0

@bookstorecowboy:你很受歡迎!很高興有幫助! –

0

像這樣的事情應該去做假設你WindowsApps表上的AppID 1對1映射與UsersAppLog:

select top 10 sum(UAL.elapsedTimeSeconds) as et, UAL.AppID, WA.Description 
from UsersAppLog UAL 
join WindowsApps WA on UAL.AppID = WA.AppID 
where UAL.userid = 1 and UAL.appid <> 7 and UAL.CreatedOn > '01 Sep 2011' group by UAL.AppID, WA.Description order by et desc