我有以下存储过程:
<html>
<head>
<title>Test</title>
</head>
<body>
<div id="message2" ></div> <!-- notice that it was expanded -->
<div id="message1" >Hello</div>
</body>
</html>
我想从两个不相关的表(它们之间没有关系)中选择一些记录。然后我想使用'union'语法将两个表的结果连接到一个结果集中。
但是,查询不起作用,因为order子句与union发生后的结果集有关。这意味着从其中一个表返回更多记录..但我需要从每个选择查询返回相同数量的结果。 我想在每个select语句之后使用order by子句,但是sql server不会允许这样的语法。
如何将表格及其结果合并到一个结果集中。
注意,我不想做select子查询或创建许多临时表。多数民众赞成因为我要在存储过程中添加更多的select语句。我不希望它效率低下或过于吵闹。
答案 0 :(得分:0)
我想你用row_number()来解决这个问题 这是同一个表的两个选择,但它可以是不同的表。
SELECT [AuctionId]
,[UserId]
,[BiddingPrice]
,[DateTime]
,9 as [source]
,ROW_NUMBER() over (order by [DateTime] asc) as rn
FROM [Test].[dbo].[Bid]
union all
SELECT [AuctionId]
,[UserId]
,[BiddingPrice]
,[DateTime]
,12 as [source]
,ROW_NUMBER() over (order by [DateTime] desc) as rn
FROM [Test].[dbo].[Bid]
ORDER BY rn, source OFFSET 2 ROWS FETCH NEXT 4 ROWS ONLY
答案 1 :(得分:0)
您几乎需要将您想要订购的不同查询和CTE中的“paginate”结合起来,如下所示:
DECLARE @Index int = 0, @NbrOfRows int = 4
; WITH CTE1 AS (
SELECT GameName, IMG380X380, GameCode, '9' AS ProviderID
FROM BGames
WHERE GameType = 'slots'
ORDER BY GameName
OFFSET @Index ROWS FETCH NEXT @NbrOfRows ROWS ONLY
), CTE2 AS (
SELECT Name, ImageUrl, GameID, '12' AS ProviderID
FROM EGame
WHERE Type = 'slots'
ORDER BY GameName
OFFSET @Index ROWS FETCH NEXT @NbrOfRows ROWS ONLY
)
SELECT * FROM CTE1
UNION ALL
SELECT * FROM CTE2
您只需要为列添加命名,以便它们符合您希望它们位于联合的末尾。