在第一个查询结果中添加 CDept_Id

Posted

技术标签:

【中文标题】在第一个查询结果中添加 CDept_Id【英文标题】:Add CDept_Id In first query for result 【发布时间】:2016-09-21 06:29:23 【问题描述】:

在我的第一个查询中,我想得到CDept_Id。但是CDept_Id 列在inward_doc_tracking_hdr 表中不存在。

它来自inward_doc_tracking_trl 表。如下所示

SELECT  CDept_id
FROM    inward_doc_tracking_trl
WHERE   ref_mkey IN ( SELECT    mkey
                      FROM      inward_doc_tracking_hdr
                      WHERE     doc_no = 'IW/HU/16/42' )

所以,从这里开始。我得到CDept_Id。现在我想在下面的查询中添加它。

SELECT  mkey ,
        Delivered_By ,
        Department_Id ,
        ( SELECT    mkey
          FROM      erp190516.dbo.emp_mst
          WHERE     mkey IN ( SELECT    employee_mkey
                              FROM      erp190516.dbo.user_mst
                              WHERE     mkey = To_User )
        ) User_Id ,
        Doc_Type ,
        Email_Id ,
        Ref_No ,
        CONVERT(VARCHAR(25), Ref_date, 103) Ref_date ,
        Inward_Amt ,
        Remarks ,
        party_name ,
        disp_through
FROM    erp190516.dbo.inward_doc_tracking_hdr ,
        CDept_id  -- add CDept_id here
WHERE   doc_no = 'IW/HU/16/42'
        AND Status_Flag = '13'

如何添加这个

更新

inward_doc_tracking_hdrmkey 等于inward_doc_tracking_trlref_mkey

【问题讨论】:

请提供表结构,以便我们了解表关系,并为您提供比现有解决方案更好的解决方案。 @Suraz:我想在第二个查询中添加CDept_Id 列。您需要与此相关的哪些帮助? 格式化后就清晰了:) 【参考方案1】:

它正在读取魔法玻璃灯泡,但我认为您可以使用mkeyref_mkey 作为链接将INNER JOIN 连接到另一张桌子:

Select hdr.mkey
      ,hdr.Delivered_By
      ,hdr.Department_Id 
      ,hdr.Doc_Type,Email_Id
      ,hdr.Ref_No
      ,convert(varchar(25),hdr.Ref_date,103) Ref_date
      ,hdr.Inward_Amt
      ,hdr.Remarks
      ,hdr.party_name
      ,hdr.disp_through
      ,trl.CDept_Id
from erp190516.dbo.inward_doc_tracking_hdr AS hdr
inner join erp190516.dbo.inward_doc_tracking_trl AS trl on hdr.mkey=trl.ref_mkey
 where hdr.doc_no = 'IW/HU/16/42'  
 and hdr.Status_Flag = '13'

更新...更多猜测...

--第一个获取CDept_Id分区顺序的CTE

;WITH OrderedCDept AS
(
    SELECT ROW_NUMBER() OVER(PARTITION BY ref_mkey ORDER BY CDept_Id DESC) AS SortInx
          ,ref_mkey
          ,CDept_Id
    FROM erp190516.dbo.inward_doc_tracking_trl
)

--第二个 CTE 使用TOP 1 WITH TIES 获取所有第一

,LatestCDept AS
(
    SELECT TOP 1 WITH TIES *
    FROM OrderedCDept
    ORDER BY SortInx
)

--现在用第二个CTE代替表加入

Select hdr.mkey
      ,hdr.Delivered_By
      ,hdr.Department_Id 
      ,hdr.Doc_Type,Email_Id
      ,hdr.Ref_No
      ,convert(varchar(25),hdr.Ref_date,103) Ref_date
      ,hdr.Inward_Amt
      ,hdr.Remarks
      ,hdr.party_name
      ,hdr.disp_through
      ,trl.CDept_Id
from erp190516.dbo.inward_doc_tracking_hdr AS hdr
inner join LatestCDept AS trl on hdr.mkey=trl.ref_mkey
 where hdr.doc_no = 'IW/HU/16/42'  
 and hdr.Status_Flag = '13'

【讨论】:

我的CDept_Id 给了我不止一个价值如何获得最新的??我的意思是desc 格式

以上是关于在第一个查询结果中添加 CDept_Id的主要内容,如果未能解决你的问题,请参考以下文章

将两个查询结果存储在第三个变量中

为啥 SQL 子查询中的外部引用会产生不同的结果?

存在查询未产生预期结果时的 T-SQL 案例

sed命令,搜索某个字符串,结果有多个匹配行,在第一个匹配行的前面添加一行内容

从一个查询中添加一个结果,然后从另一个查询中添加第二个结果

表的集合操作