簡體   English   中英

選擇UNION ALL上的最大記錄

[英]Select Max Records on UNION ALL

我有以下內容可以使我正確返回3組結果

SELECT        TOP (1) rid,score, weight
FROM            dbo.tblThree
WHERE        (caseNo = '111111111')
ORDER BY rID DESC

SELECT        TOP (1) rid,score, weight
FROM            dbo.tblTwo
WHERE        (caseNo = '111111111')
ORDER BY rID DESC

SELECT        TOP (1) rid,score, weight
FROM            dbo.tblOne
WHERE        (caseNo = '111111111')
ORDER BY rID DESC

由於ORDER BY語句,在它們之間添加UNION ALL失敗。 但是,如果我擺脫它們,它將失敗,因為它沒有獲得最新記錄。

有沒有更簡單的解決方案? 我想要的是一條SQL語句來輸出3行。

請嘗試以下操作:

select * from ( select top (1) rid, score, weight
                from dbo.tblThree
                where caseNo = '111111111'
                order by rid desc) t1
union all
select * from ( select top (1) rid, score, weight
                from dbo.tblTwo
                where caseNo = '111111111'
                order by rid desc) t2
union all
select * from ( select top (1) rid, score, weight
                from dbo.tblOne
                where caseNo = '111111111' 
                order by rid desc) t3

您可以使用以下命令獲得所需的輸出:

WITH data AS (
    SELECT        rid,score, weight, ROW_NUMBER() OVER (ORDER BY rID DESC) AS rn
    FROM            dbo.tblThree
    WHERE        (caseNo = '111111111')
    UNION ALL 
    SELECT        rid,score, weight, ROW_NUMBER() OVER (ORDER BY rID DESC) AS rn
    FROM            dbo.tblTwo
    WHERE        (caseNo = '111111111')
    UNION ALL
    SELECT        rid,score, weight, ROW_NUMBER() OVER (ORDER BY rID DESC) AS rn
    FROM            dbo.tblOne
    WHERE        (caseNo = '111111111')
)
SELECT *
FROM    data 
WHERE   rn = 1

試試這個查詢

select rID,score, weight from 
(SELECT        TOP (1) rID,score, weight,ROW_NUMBER() over(order by rID) as a
FROM            dbo.tblThree
WHERE        (caseNo = '111111111')
UNION ALL
SELECT        TOP (1) rid,score, weight,ROW_NUMBER() over(order by rID) as a
FROM            dbo.tblTwo
WHERE        (caseNo = '111111111')
UNION ALL
SELECT        TOP (1) rid,score, weight,ROW_NUMBER() over(order by rID) as a
FROM            dbo.tblOne
WHERE        (caseNo = '111111111'))t
;WITH CTE1 as
(
  SELECT        TOP (1) rid,score, weight
  FROM            dbo.tblThree
  WHERE        (caseNo = '111111111')
  ORDER BY rID DESC
), CTE2 as
(
  SELECT        TOP (1) rid,score, weight
  FROM            dbo.tblTwo
  WHERE        (caseNo = '111111111')
  ORDER BY rID DESC
), CTE3 as
(
  SELECT        TOP (1) rid,score, weight
  FROM            dbo.tblOne
  WHERE        (caseNo = '111111111')
  ORDER BY rID DESC
)
SELECT
  rid,score, weight 
FROM CTE1
UNION ALL
SELECT
  rid,score, weight 
FROM CTE2
UNION ALL
SELECT
  rid,score, weight 
FROM CTE3

暫無
暫無

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

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