使用两个任务列表和用户列表连接表
Joining Tables with two tasks list and user list
我有一个关于在我为我们的业务构建的查询中加入用户 table 的问题。这是一份基于用户完成的 7 项不同任务的小型生产力报告。
有两个任务table:
1)清单任务
2) 要求的任务
请求的任务是清单任务的扩展。
请求的任务在请求的任务 Table 中有 REQUESTED DATE 列
请求的任务在清单任务 table.
中有完成日期列
当我运行下面的查询时,显然SecurityIdentity Table 仅由Checklist Task table 通过CompletedByID 加入以显示他们的全名。
任务名称 'Recorded Docs' 是一个请求清单,具有请求日期(来自请求任务的 RequestedDate table)和接收日期(来自清单 table 的 CompletedDate),来自两个如上所述不同 table。
SELECT o.number AS 'OrderNo',
s.fullname AS 'CPC Emp',
Max(CASE
WHEN t.description = 'Loan Package to Lender' THEN
Dateadd(hour, -4, t.completeddate)
ELSE NULL
END) AS 'Loan Pck To Lender',
Max(CASE
WHEN t.description = 'Recording Audit' THEN
Dateadd(hour, -4, t.completeddate)
ELSE NULL
END) AS 'Recording Audit',
Max(CASE
WHEN t.description = 'Recorded Docs' THEN
Dateadd(hour, -4, rt.requesteddate)
ELSE NULL
END) AS 'Recorded Docs Requested',
Max(CASE
WHEN t.description = 'Recorded Docs' THEN
Dateadd(hour, -4, t.completeddate)
ELSE NULL
END) AS 'Recorded Docs Received',
Max(CASE
WHEN t.description = 'Recorded Docs to Lender' THEN
Dateadd(hour, -4, t.completeddate)
ELSE NULL
END) AS 'Recorded Docs to Lender',
Max(CASE
WHEN t.description = 'Recorded Docs to Purchaser' THEN
Dateadd(hour, -4, t.completeddate)
ELSE NULL
END) AS 'Recorded Docs to Purchaser',
Max(CASE
WHEN t.description = 'Title Policy to Lender' THEN
Dateadd(hour, -4, t.completeddate)
ELSE NULL
END) AS 'TP to Lender',
Max(CASE
WHEN t.description = 'Title Policy to Purchaser' THEN
Dateadd(hour, -4, t.completeddate)
ELSE NULL
END) AS 'TP Purchaser'
FROM pf.orderinfo oi
INNER JOIN pfm.[order] o
ON ( o.rootid# = oi.rootid )
INNER JOIN core.profile op
ON ( oi.owningprofileid = op.id )
INNER JOIN zref.orderstatus os
ON ( oi.orderstatus = os.id )
INNER JOIN zref.producttype pt
ON ( o.producttypeid = pt.id
AND pt.id <> '15' )
INNER JOIN pfm.task t
ON ( t.rootid# = oi.rootid
AND ( t.description IN ( 'Loan Package to Lender',
'Recording Audit',
'Recorded Docs to Lender',
'Recorded Docs to Purchaser',
'Title Policy to Lender',
'Title Policy to Purchaser'
,
'Recorded Docs' ) ) )
LEFT OUTER JOIN pfm.requestedtask rt
ON ( rt.rootid# = t.rootid#
AND rt.id# = t.id#
AND rt.lastid# = t.lastid# )
LEFT OUTER JOIN core.securityidentity s
ON ( s.id = t.completedbyid )
WHERE ( op.NAME LIKE 'BH104%' -- WNCW Res Profiles Begin.
OR op.NAME LIKE 'CL170%'
OR op.NAME LIKE 'CM104%'
OR op.NAME LIKE 'IN103%'
OR op.NAME LIKE 'SF107%'
OR op.NAME LIKE 'AW170%'
OR op.NAME LIKE 'JW170%'
OR op.NAME LIKE 'KH170%'
OR op.NAME LIKE 'PM170%'
OR op.NAME LIKE 'SC170%'
OR op.NAME LIKE 'EC102%'
OR op.NAME LIKE 'MT175%'
OR op.NAME LIKE 'CU108%'
OR op.NAME LIKE 'NF106%'
OR op.NAME LIKE 'GA105%'
OR op.NAME LIKE 'SL105%'
OR op.NAME LIKE 'PC135%'
OR op.NAME LIKE 'PE103%'
OR op.NAME LIKE 'OC130%'
OR op.NAME LIKE 'WF130%'
OR op.NAME LIKE 'SS100%'
OR op.NAME LIKE 'SO191%'
OR op.NAME LIKE 'CA115%'
OR op.NAME LIKE 'DO115%'
OR op.NAME LIKE 'WC115%'
OR op.NAME LIKE 'WO115%' --WNCW RES Profiles End.
AND op.enabled = 1
AND oi.istemplate = 0
AND oi.number NOT LIKE '%test%'
AND oi.number NOT LIKE 'tr%' )
AND oi.number = 'WC115-13-0048'
AND s.fullname IS NOT NULL
GROUP BY s.fullname,
o.number
ORDER BY 2 DESC
当我查询这个sql时,结果是这个红色方块:
但是,Stacey 没有提出要求,但 Kathy 提出了要求。因此,结果 date/timestamp 应该显示为 Kathy 请求 Recorded Docs 而不是 Stacey。
我已经尝试了很多不同的方法来加入安全身份 table 来纠正这个问题,但是没能成功。任何帮助将不胜感激!
这是三个 table:
任务
请求的任务
安全身份
我认为您的问题可能与您加入任务的 ID 有关 table。正如现在所写的那样,无论是谁请求了任务,您都将显示完成任务的人的姓名,因为您已加入 CompletedByID。如果请求与分配同义,那么您应该加入 AssignedToID。不管怎样,你需要弄清楚你想显示谁的名字,然后加入合适的ID。
下面是我注意到的其他一些东西 changed/improved:
您在 OR op.NAME LIKE 'WO115%' 后缺少右括号。除非您确切地知道您正在尝试做什么,否则您永远不应允许在同一组括号内组合使用 OR 和 AND 语句。
您可以用一个 in()
替换所有那些 op.Name,例如 'XXXX%'
使用下面的函数,如果您的姓名没有编入索引或者您有大量记录,您可能会发现速度明显变慢。你现在的做法并没有错,但是使用下图的in()可能会更简单。
LEFT(op.Name,4) in('XXXXX%','YYYYY%',...,'ZZZZZ%')
- 最后,您在这里为我们提供了大量信息,这让我们更容易为您提供帮助。也就是说,你给了我们大量的信息。据我所知,我可以判断您的业务与抵押贷款或财务有关,这意味着有人可能对您的数据结构感兴趣。此外,您还向我们提供了 table 姓名、架构名称和少数员工的姓名。我不是黑客,但我可以想象有人会发现这些信息很有用。将来,我会考虑更改一些业务关键信息或在屏幕截图中模糊您的更多数据。
我有一个关于在我为我们的业务构建的查询中加入用户 table 的问题。这是一份基于用户完成的 7 项不同任务的小型生产力报告。
有两个任务table: 1)清单任务 2) 要求的任务
请求的任务是清单任务的扩展。 请求的任务在请求的任务 Table 中有 REQUESTED DATE 列 请求的任务在清单任务 table.
中有完成日期列当我运行下面的查询时,显然SecurityIdentity Table 仅由Checklist Task table 通过CompletedByID 加入以显示他们的全名。
任务名称 'Recorded Docs' 是一个请求清单,具有请求日期(来自请求任务的 RequestedDate table)和接收日期(来自清单 table 的 CompletedDate),来自两个如上所述不同 table。
SELECT o.number AS 'OrderNo',
s.fullname AS 'CPC Emp',
Max(CASE
WHEN t.description = 'Loan Package to Lender' THEN
Dateadd(hour, -4, t.completeddate)
ELSE NULL
END) AS 'Loan Pck To Lender',
Max(CASE
WHEN t.description = 'Recording Audit' THEN
Dateadd(hour, -4, t.completeddate)
ELSE NULL
END) AS 'Recording Audit',
Max(CASE
WHEN t.description = 'Recorded Docs' THEN
Dateadd(hour, -4, rt.requesteddate)
ELSE NULL
END) AS 'Recorded Docs Requested',
Max(CASE
WHEN t.description = 'Recorded Docs' THEN
Dateadd(hour, -4, t.completeddate)
ELSE NULL
END) AS 'Recorded Docs Received',
Max(CASE
WHEN t.description = 'Recorded Docs to Lender' THEN
Dateadd(hour, -4, t.completeddate)
ELSE NULL
END) AS 'Recorded Docs to Lender',
Max(CASE
WHEN t.description = 'Recorded Docs to Purchaser' THEN
Dateadd(hour, -4, t.completeddate)
ELSE NULL
END) AS 'Recorded Docs to Purchaser',
Max(CASE
WHEN t.description = 'Title Policy to Lender' THEN
Dateadd(hour, -4, t.completeddate)
ELSE NULL
END) AS 'TP to Lender',
Max(CASE
WHEN t.description = 'Title Policy to Purchaser' THEN
Dateadd(hour, -4, t.completeddate)
ELSE NULL
END) AS 'TP Purchaser'
FROM pf.orderinfo oi
INNER JOIN pfm.[order] o
ON ( o.rootid# = oi.rootid )
INNER JOIN core.profile op
ON ( oi.owningprofileid = op.id )
INNER JOIN zref.orderstatus os
ON ( oi.orderstatus = os.id )
INNER JOIN zref.producttype pt
ON ( o.producttypeid = pt.id
AND pt.id <> '15' )
INNER JOIN pfm.task t
ON ( t.rootid# = oi.rootid
AND ( t.description IN ( 'Loan Package to Lender',
'Recording Audit',
'Recorded Docs to Lender',
'Recorded Docs to Purchaser',
'Title Policy to Lender',
'Title Policy to Purchaser'
,
'Recorded Docs' ) ) )
LEFT OUTER JOIN pfm.requestedtask rt
ON ( rt.rootid# = t.rootid#
AND rt.id# = t.id#
AND rt.lastid# = t.lastid# )
LEFT OUTER JOIN core.securityidentity s
ON ( s.id = t.completedbyid )
WHERE ( op.NAME LIKE 'BH104%' -- WNCW Res Profiles Begin.
OR op.NAME LIKE 'CL170%'
OR op.NAME LIKE 'CM104%'
OR op.NAME LIKE 'IN103%'
OR op.NAME LIKE 'SF107%'
OR op.NAME LIKE 'AW170%'
OR op.NAME LIKE 'JW170%'
OR op.NAME LIKE 'KH170%'
OR op.NAME LIKE 'PM170%'
OR op.NAME LIKE 'SC170%'
OR op.NAME LIKE 'EC102%'
OR op.NAME LIKE 'MT175%'
OR op.NAME LIKE 'CU108%'
OR op.NAME LIKE 'NF106%'
OR op.NAME LIKE 'GA105%'
OR op.NAME LIKE 'SL105%'
OR op.NAME LIKE 'PC135%'
OR op.NAME LIKE 'PE103%'
OR op.NAME LIKE 'OC130%'
OR op.NAME LIKE 'WF130%'
OR op.NAME LIKE 'SS100%'
OR op.NAME LIKE 'SO191%'
OR op.NAME LIKE 'CA115%'
OR op.NAME LIKE 'DO115%'
OR op.NAME LIKE 'WC115%'
OR op.NAME LIKE 'WO115%' --WNCW RES Profiles End.
AND op.enabled = 1
AND oi.istemplate = 0
AND oi.number NOT LIKE '%test%'
AND oi.number NOT LIKE 'tr%' )
AND oi.number = 'WC115-13-0048'
AND s.fullname IS NOT NULL
GROUP BY s.fullname,
o.number
ORDER BY 2 DESC
当我查询这个sql时,结果是这个红色方块:
但是,Stacey 没有提出要求,但 Kathy 提出了要求。因此,结果 date/timestamp 应该显示为 Kathy 请求 Recorded Docs 而不是 Stacey。
我已经尝试了很多不同的方法来加入安全身份 table 来纠正这个问题,但是没能成功。任何帮助将不胜感激!
这是三个 table:
任务
请求的任务
安全身份
我认为您的问题可能与您加入任务的 ID 有关 table。正如现在所写的那样,无论是谁请求了任务,您都将显示完成任务的人的姓名,因为您已加入 CompletedByID。如果请求与分配同义,那么您应该加入 AssignedToID。不管怎样,你需要弄清楚你想显示谁的名字,然后加入合适的ID。
下面是我注意到的其他一些东西 changed/improved:
您在 OR op.NAME LIKE 'WO115%' 后缺少右括号。除非您确切地知道您正在尝试做什么,否则您永远不应允许在同一组括号内组合使用 OR 和 AND 语句。
您可以用一个 in()
替换所有那些 op.Name,例如 'XXXX%'
使用下面的函数,如果您的姓名没有编入索引或者您有大量记录,您可能会发现速度明显变慢。你现在的做法并没有错,但是使用下图的in()可能会更简单。
LEFT(op.Name,4) in('XXXXX%','YYYYY%',...,'ZZZZZ%')
- 最后,您在这里为我们提供了大量信息,这让我们更容易为您提供帮助。也就是说,你给了我们大量的信息。据我所知,我可以判断您的业务与抵押贷款或财务有关,这意味着有人可能对您的数据结构感兴趣。此外,您还向我们提供了 table 姓名、架构名称和少数员工的姓名。我不是黑客,但我可以想象有人会发现这些信息很有用。将来,我会考虑更改一些业务关键信息或在屏幕截图中模糊您的更多数据。