好的,这里有两个录取,一个是我确定这个问题已经得到解答,它与连接有关,第二个是我不知道为什么我在编写一个需要复杂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
我希望根据返回的windowsapps
从appid
表中查找“description”。
任何帮助将不胜感激。
菲尔。
答案 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