Sql查询:无法从其他表中添加列

Sql查询:无法从其他表中添加列,sql,stored-procedures,Sql,Stored Procedures,我当前正在使用正确运行的此查询: SELECT t.TestId, t.Days, t.UserId_Fk , [Date] = Convert(date,DATEADD(dd, 0, DATEDIFF(dd, 0, t.CheckIn))) , CheckIn = CONVERT(CHAR(5), t.CheckIn, 108) , CheckOut = CONVERT(CHAR(5), t.CheckOut, 108) , [Hours] = CAST(DATEDIFF(M

我当前正在使用正确运行的此查询:

SELECT 
 t.TestId,
 t.Days,
  t.UserId_Fk    
, [Date] = Convert(date,DATEADD(dd, 0, DATEDIFF(dd, 0, t.CheckIn)))
, CheckIn = CONVERT(CHAR(5), t.CheckIn, 108)
, CheckOut = CONVERT(CHAR(5), t.CheckOut, 108)
, [Hours] = CAST(DATEDIFF(MINUTE, t.CheckIn, t.CheckOut) / 60. AS DECIMAL(10,2))
FROM (
SELECT 
TestId=t.TestId,
Days=t.Days,
      t.UserId_Fk
    , CheckIn = t.CheckInTime
    , CheckOut = r.CheckInTime
    , RowNum = ROW_NUMBER() OVER (PARTITION BY t.UserId_Fk, r.CheckInTime ORDER BY 1/0)
FROM UserTime t
OUTER APPLY (
    SELECT TOP 1 *
    FROM UserTime t2
    WHERE 
        t2.CheckInTime > t.CheckInTime
        AND DATEADD(dd, 0, DATEDIFF(dd, 0, t.CheckInTime)) = DATEADD(dd, 0, DATEDIFF(dd, 0, t2.CheckInTime))
        AND t2.LoginStatus = 'O'
    ORDER BY t2.CheckInTime
        ) r
    WHERE t.LoginStatus = 'I' 
) t
WHERE t.RowNum = 1
结果是:

 TestId      Days    UserId_Fk    Date        CheckIn  CheckOut Hours
  45       Tuesday      3        2014-05-13    11:49    11:49    0.00
我想在此结果中添加另一个名为FullName的字段(列),该字段来自另一个字段 表用户 我尝试了各种方法,但都没有成功

表关系为:

              Table Test 

          TestId    int(pk) 
        UserId_Fk   int 
             Days   nvarchar(50)    
      CheckInTime   datetime    
      LoginStatus   char(1) 


              Table Users

        UserId  int(Pk) 
       FullName  varchar(50)    

首先加入Test&Users表,然后尝试选择用户的全名。您可以通过userid\u fk加入。加入后,您可以在加入的表上应用top 1选择和其他格式

如下所示:



    SELECT 
     t.TestId,
     t.Days,
      t.UserId_Fk    
    , [Date] = Convert(date,DATEADD(dd, 0, DATEDIFF(dd, 0, t.CheckIn)))
    , CheckIn = CONVERT(CHAR(5), t.CheckIn, 108)
    , CheckOut = CONVERT(CHAR(5), t.CheckOut, 108)
    , [Hours] = CAST(DATEDIFF(MINUTE, t.CheckIn, t.CheckOut) / 60. AS DECIMAL(10,2))
    FROM

    (SELECT *
    FROM test
    JOIN users
    ON test.userid_fk=users.userid) t

    OUTER APPLY (
        SELECT TOP 1 *
        FROM UserTime t2
        WHERE 
            t2.CheckInTime > t.CheckInTime
            AND DATEADD(dd, 0, DATEDIFF(dd, 0, t.CheckInTime)) = DATEADD(dd, 0, DATEDIFF(dd, 0, t2.CheckInTime))
            AND t2.LoginStatus = 'O'
        ORDER BY t2.CheckInTime
            ) r
        WHERE t.LoginStatus = 'I' 
    ) t
    WHERE t.RowNum = 1

请尝试几次,如果有任何输入错误,请修复查询。

您应该能够将t加入到用户中。当你尝试这样做时,你得到了什么结果?(确认钥匙确实匹配!)
 SELECT

 t.TestId,
 t.Days,
 t.FullName  
, [Date] = Convert(date,DATEADD(dd, 0, DATEDIFF(dd, 0, t.CheckIn)))
, CheckIn = CONVERT(CHAR(5), t.CheckIn, 108)
, CheckOut = CONVERT(CHAR(5), t.CheckOut, 108)
, [Hours] = CAST(DATEDIFF(MINUTE, t.CheckIn, t.CheckOut) / 60. AS DECIMAL(10,2))
FROM (
SELECT 
FullName=Users.FullName,
TestId=t.TestId,
Days=t.Days,
      t.UserId_Fk
    , CheckIn = t.CheckInTime
    , CheckOut = r.CheckInTime
    , RowNum = ROW_NUMBER() OVER (PARTITION BY t.UserId_Fk, r.CheckInTime ORDER BY 1/0)
FROM UserTime t 
Inner join Users
on t.UserId_Fk=Users.UserId
    OUTER APPLY (
    SELECT TOP 1 *
    FROM UserTime t2
    WHERE 
        t2.CheckInTime > t.CheckInTime
        AND DATEADD(dd, 0, DATEDIFF(dd, 0, t.CheckInTime)) = DATEADD(dd, 0, DATEDIFF(dd, 0, t2.CheckInTime))
        AND t2.LoginStatus = 'O'
    ORDER BY t2.CheckInTime
) r
WHERE t.LoginStatus = 'I' 
) t
WHERE t.RowNum = 1