代码之家  ›  专栏  ›  技术社区  ›  timz_123

SQL查询未返回正确的记录

  •  -1
  • timz_123  · 技术社区  · 9 年前

    我有3个表,我必须从中一起提取记录,并且必须在RadGrid中显示。

    从表1中可以看出 要求 表,我必须获取以下列:

    R、 请求ID
    R、 条形码编号
    R、 公司
    R、 状态

    从表2可以看出 Xml(Xml) 表,我必须获取以下列:

    x、 扫描者
    x、 扫描日期
    x、 验证人
    x、 验证日期

    如表3所示 工作流 表,我必须获取以下列:

    W、 行动
    W、 用户名
    W、 创建日期

    现在,这个 W.Action 列中包含以下数据 工作流 表格:
    enter image description here
    W、 行动 列可以有重复的数据,如我上面所示。 对于每一个“ 行动 列,有 用户名 “列和” 创建日期 “中的列 工作流 桌子

    现在,我必须从上面3张表中提取记录 W.Action = 'Submit' W.Action = 'Update' 此外,在Select查询中,我必须选择 W、 操作=“提交” 作为不同的列,并且 W、 操作=“更新” 作为不同的列,格式如下:
    enter image description here

    为此,我创建了以下查询:

    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' 作为单独的列'

    但我没有得到正确的记录。

    如果我单独运行查询的第一部分(即,对于Action=“Submit”) 它给了我142747张唱片 如果我单独运行查询的第二部分(即,操作=“更新”) 它给了我73021条记录 但如果我一次运行整个查询,它只给我215774条记录,这是不正确的。
    它应该给我(142747+73021)个记录。

    请告诉我我的查询有什么问题?
    如何使用Action=Submit&操作=作为单独的列更新。
    请回复

    1 回复  |  直到 9 年前
        1
  •  0
  •   Viktor Bardakov    9 年前
       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