SQL 查询没有返回正确的记录
SQL Query not returning proper records
我有 3 个 Tables,我必须从中一起获取记录,并且必须在 RadGrid 中显示。
从 Table-1 说 请求 table,我必须获取以下列:
R.RequestID
R.BarcodeNo
R.Company
R.Status
从 Table-2 说 Xml table,我必须获取以下列:
x.ScannedBy
x.ScannedDate
x.VerifiedBy
x.VerifiedDate
从 Table-3 说 Workflow table,我必须获取以下列:
W.Action
W.UserName
W.CreatedDate
现在,此 W.Action
列在 Workflow table 中具有以下数据:
这个 W.Action
列可以有重复的数据,如我上面所示。
对于每个“Action”列,都有“UserName”列和“CreatedDate”列工作流程 table.
现在,我必须从上面的 3 table 中获取记录,其 W.Action = 'Submit'
和 W.Action = 'Update'
而且,在 Select 查询中,我必须将 Select W.Action = 'Submit'
作为不同的列,将 W.Action = 'Update'
作为不同的列,如下格式:
为此,我创建了以下查询:
Select * FROM
(
SELECT distinct
R.RequestID,
R.BarcodeNo,
R.Company,
R.Status,
x.ScannedBy,
x.ScannedDate,
x.VerifiedBy,
x.VerifiedDate,
W.Action, W.UserName as SubmitName, W.CreatedDate as SubmitDate
From [tbl_Request] (NOLOCK) R
Left Join [tbl_Xml](NOLOCK) X On X.XmlID = R.XmlID
Left Join [tbl_Workflow] (NOLOCK) W On W.RequestID = R.RequestID
Where W.Action = 'Submit'
) as A
Left Join
(
SELECT RequestID, W.Action, W.UserName as UpdateName , W.CreatedDate AS UpdateDate
From [tbl_Request] (NOLOCK) R
Left Join [tbl_Xml](NOLOCK) X On X.XmlID = R.XmlID
Left Join [tbl_Workflow] (NOLOCK) W On W.RequestID = R.RequestID
Where Action = 'Update'
) as B
ON A.RequestID=B.RequestID
通过上面的查询我可以成功得到 Action = 'Submit'
作为
一个单独的列和 Action = 'Update'
作为一个单独的列'
But I am not getting the proper records.
如果我 运行 单独查询的第一部分(即,对于 Action = 'Submit')
它给了我 142747 条记录
AND 如果我单独 运行 查询的第二部分(即对于 Action = 'Update')
它给了我 73021 条记录
但是如果我一次 运行 整个查询,它只给我 215774 条记录,这是不合适的。
假设给我(142747 + 73021)条记录。
请让我知道我的查询有什么问题?
如何获取正确的记录以及 Action = Submit & Action = Update 作为单独的列。
请回复
SELECT
R.RequestID,
R.BarcodeNo,
R.Company,
R.Status,
x.ScannedBy,
x.ScannedDate,
x.VerifiedBy,
x.VerifiedDate,
max(case when W.Action='Submit' then W.UserName end) as SubmitName,
max(case when W.Action='Submit' then W.CreatedDate end) as SubmitDate,
max(case when W.Action='Update' then W.UserName end) as UpdateName ,
max(case when W.Action='Update' then W.CreatedDate end) as UpdateDate
From [tbl_Request] (NOLOCK) R
Left Join [tbl_Xml](NOLOCK) X On X.XmlID = R.XmlID
Left Join [tbl_Workflow] (NOLOCK) W On W.RequestID = R.RequestID
Where W.Action in ( 'Submit','Update')
group by
R.RequestID,
R.BarcodeNo,
R.Company,
R.Status,
x.ScannedBy,
x.ScannedDate,
x.VerifiedBy,
x.VerifiedDate
我有 3 个 Tables,我必须从中一起获取记录,并且必须在 RadGrid 中显示。
从 Table-1 说 请求 table,我必须获取以下列:
R.RequestID
R.BarcodeNo
R.Company
R.Status
从 Table-2 说 Xml table,我必须获取以下列:
x.ScannedBy
x.ScannedDate
x.VerifiedBy
x.VerifiedDate
从 Table-3 说 Workflow table,我必须获取以下列:
W.Action
W.UserName
W.CreatedDate
现在,此 W.Action
列在 Workflow table 中具有以下数据:
这个 W.Action
列可以有重复的数据,如我上面所示。
对于每个“Action”列,都有“UserName”列和“CreatedDate”列工作流程 table.
现在,我必须从上面的 3 table 中获取记录,其 W.Action = 'Submit'
和 W.Action = 'Update'
而且,在 Select 查询中,我必须将 Select W.Action = 'Submit'
作为不同的列,将 W.Action = 'Update'
作为不同的列,如下格式:
为此,我创建了以下查询:
Select * FROM
(
SELECT distinct
R.RequestID,
R.BarcodeNo,
R.Company,
R.Status,
x.ScannedBy,
x.ScannedDate,
x.VerifiedBy,
x.VerifiedDate,
W.Action, W.UserName as SubmitName, W.CreatedDate as SubmitDate
From [tbl_Request] (NOLOCK) R
Left Join [tbl_Xml](NOLOCK) X On X.XmlID = R.XmlID
Left Join [tbl_Workflow] (NOLOCK) W On W.RequestID = R.RequestID
Where W.Action = 'Submit'
) as A
Left Join
(
SELECT RequestID, W.Action, W.UserName as UpdateName , W.CreatedDate AS UpdateDate
From [tbl_Request] (NOLOCK) R
Left Join [tbl_Xml](NOLOCK) X On X.XmlID = R.XmlID
Left Join [tbl_Workflow] (NOLOCK) W On W.RequestID = R.RequestID
Where Action = 'Update'
) as B
ON A.RequestID=B.RequestID
通过上面的查询我可以成功得到 Action = 'Submit'
作为
一个单独的列和 Action = 'Update'
作为一个单独的列'
But I am not getting the proper records.
如果我 运行 单独查询的第一部分(即,对于 Action = 'Submit')
它给了我 142747 条记录
AND 如果我单独 运行 查询的第二部分(即对于 Action = 'Update')
它给了我 73021 条记录
但是如果我一次 运行 整个查询,它只给我 215774 条记录,这是不合适的。
假设给我(142747 + 73021)条记录。
请让我知道我的查询有什么问题?
如何获取正确的记录以及 Action = Submit & Action = Update 作为单独的列。
请回复
SELECT
R.RequestID,
R.BarcodeNo,
R.Company,
R.Status,
x.ScannedBy,
x.ScannedDate,
x.VerifiedBy,
x.VerifiedDate,
max(case when W.Action='Submit' then W.UserName end) as SubmitName,
max(case when W.Action='Submit' then W.CreatedDate end) as SubmitDate,
max(case when W.Action='Update' then W.UserName end) as UpdateName ,
max(case when W.Action='Update' then W.CreatedDate end) as UpdateDate
From [tbl_Request] (NOLOCK) R
Left Join [tbl_Xml](NOLOCK) X On X.XmlID = R.XmlID
Left Join [tbl_Workflow] (NOLOCK) W On W.RequestID = R.RequestID
Where W.Action in ( 'Submit','Update')
group by
R.RequestID,
R.BarcodeNo,
R.Company,
R.Status,
x.ScannedBy,
x.ScannedDate,
x.VerifiedBy,
x.VerifiedDate