SQL - 根据其他列的数据创建“虚拟”列

时间:2012-09-26 17:24:13

标签: sql sql-server-2008 tsql

我正在处理SQL查询的一些问题,对不起,我没有任何正在进行的工作要展示,因为到目前为止我没有尝试过任何工作,但是所以我希望有人能指出我正确的方向。

表格

计算机:

[SN][PN][ComputerName][Model][OS][Architecture][RAM][CPU]

登录:

[SN][Username][Timestamp]

的信息:

它以这种方式工作,每次用户登录到计算机时,计算机信息都会更新到计算机表,并且用户名和时间戳会被插入到登录表中。

结果

我想要实现的结果如下:

[SN][PN][ComputerName][Model][OS][Architecture][RAM][CPU]**[Primary User]**

每台计算机应该只有一行

主要用户字段应基于5个最新登录,并且是5个中重复次数最多的用户名。

所以我认为它包装起来了,我希望有人能够至少指出我正确的方向,因为谷歌必须提供的所有结果现在显示为红色。

2 个答案:

答案 0 :(得分:3)

这有点RBAR但是类似下面的事情应该这样做。

SELECT [SN],
       [PN],
       [ComputerName],
       [Model],
       [OS],
       [Architecture],
       [RAM],
       [CPU],
       O.[Username] AS [Primary User]
FROM   Computers C
       OUTER APPLY (SELECT TOP 1 [Username]
                    FROM   (SELECT TOP (5) *
                            FROM   Logons L
                            WHERE  L.[SN] = C.[SN]
                            ORDER  BY [Timestamp] DESC) Last5Users
                    GROUP  BY [Username]
                    ORDER  BY Count(*) DESC,
                              Max([Timestamp]) DESC) O 

答案 1 :(得分:0)

看起来您想要定义计算列。看看这个问题:Creating a computed column in SQL Server 2008