解析结果集中的ID

时间:2011-09-20 16:00:27

标签: sql-server

好的,这里有两个录取,一个是我确定这个问题已经得到解答,它与连接有关,第二个是我不知道为什么我在编写一个需要复杂SQL的应用程序时我真的不懂SQL。

这是问题,很可能是蛋糕走路,但我似乎无法在这里找到答案;

我有一个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

我希望根据返回的windowsappsappid表中查找“description”。

任何帮助将不胜感激。

菲尔。

2 个答案:

答案 0 :(得分: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

不知道你的确切架构(这将有助于将来发布这些内容!),我猜测你在AppID表中也有WindowsApplications - 而且我已经假设您的所有u.AppID都匹配正确 - 因此INNER JOIN

我还建议始终使用ISO-8601日期格式(YYYYMMDD) - 这是确保您的代码无论如何都能运作的唯一方法有关SQL Server计算机上的区域设置/区域/语言设置。

答案 1 :(得分:0)

这样的事情应该这样做,假设您的WindowsApps表是与该AppID上的UsersAppLog的1对1映射:

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