2

我有以下表格和相应的数据:

RequestsTable
ReqID | ReqBy | ReqDate
1 | User1 | 30/04/2013
2 | User2 | 30/04/2013
3 | MasterUser | 30/04/2013

RequestorsTable
ReqUserName | ReqFullName
User1 | Sample User 1
User2 | Sample User 2

我需要输出是这样的:

ReqID | ReqBy | ReqDate
1 | Sample User 1 | 30/04/2013
2 | Sample User 2 | 30/04/2013
3 | MasterUser | 30/04/2013

我可以知道我该怎么做吗^^?

快速说明:MasterUser 是一个超级用户帐户,因此不在数据库中,但可以发出请求。

谢谢您的帮助。

4

2 回答 2

5

使用ISNULLand aLEFT OUTER JOIN允许您有选择地选择要在结果集中返回的列。

  • 如果在 RequestorsTable 中找到匹配的记录,则使用该值
  • 否则,使用 RequestsTable 中的 ReqBy 值

示例 Select 语句

SELECT rt.ReqID, ISNULL(rst.ReqFullName, rt.ReqBy), rt.ReqDate
FROM   RequestsTable rt
       LEFT OUTER JOIN RequestorsTable rst ON rst.ReqUserName = rt.ReqBy

另一种方法ISNULLCOALESCE或多或少执行类似的功能。

示例 Select 语句

SELECT rt.ReqID, COALESCE(rst.ReqFullName, rt.ReqBy), rt.ReqDate
FROM   RequestsTable rt
       LEFT OUTER JOIN RequestorsTable rst ON rst.ReqUserName = rt.ReqBy
于 2013-04-30T08:42:48.597 回答
1

试试这个——

SELECT 
      rt.ReqID
    , ReqBy = ISNULL(rt2.ReqFullName, rt.ReqBy)
    , rt.ReqDate  
FROM dbo.RequestsTable rt
LEFT JOIN dbo.RequestorsTable rt2 ON rt.ReqBy = rt2.ReqUserName
于 2013-04-30T08:43:35.940 回答