簡體   English   中英

從子查詢中選擇SQL

[英]SQL Selecting from Sub Query

我有一個表,其中的合同ID具有多個值。

SELECT contractid
    ,milestoneid
    ,DATE
    ,type
    ,RANK() OVER (PARTITION BY contractid ORDER BY Milestoneid ASC) AS RankNbr
FROM [TSWDATA].[dbo].t_milestone
WHERE contractid = 1056229


contractid milestoneid  date        type               RankNbr
1056        43269       10/10/15    Full                1
1056        43449       10/26/15    GB                  2
1056        43456       10/26/15    Submit for Funding  3
1056        43463       10/26/15    Cleared             4

我需要加入主合同表並僅在值“ GB”是最大里程碑數時才拉合同。

我可以在where子句中這樣做嗎?

這對您有用嗎?

 SELECT contractid
      ,milestoneid
     ,DATE
     ,type
     ,RANK() OVER (PARTITION BY contractid ORDER BY Milestoneid ASC) AS    RankNbr
 FROM [TSWDATA].[dbo].t_milestone
 WHERE EXISTS (SELECT TOP (1) *
               FROM SubTable AS s
               WHERE s.type = 'GB'
                 AND s.contractID = [TSWDATA].[dbo].t_milestone.contractid
               ORDER BY s.milestoneID DESC
              )
   AND contractid = 1056229

如果您需要合同表中的記錄,則可以加入排名查詢中。 只需將訂單更改為DESC,即可使RankNbr 1成為最大里程碑

SELECT * 
FROM [TSWDATA].[dbo].t_contract c
JOIN (
    SELECT contractid
        ,type
        ,RANK() OVER (PARTITION BY contractid ORDER BY Milestoneid DESC) AS RankNbr
    FROM [TSWDATA].[dbo].t_milestone
) ms ON ms.contractid = c.contractid
WHERE 
    --contractid = 1056229 AND 
    ms.RankNbr = 1 AND ms.type = 'GB'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM