Tsql Union Query在我的asp.net gridview中打破了排序

Hca*_*tek 2 sql t-sql sql-server sql-server-2005

我有一个可以自行运行的存储过程.最近的一项要求使我认为Union查询将完成我所需要的.这是工作版本.它使用ROW_NUMBER()来正确完成分页和排序

SELECT x.TicketID,
 x.TicketNumber,
 x.AccountID,
 x.SkillID
FROM (
SELECT  ROW_NUMBER() OVER(ORDER BY
    CASE WHEN @ipv_SortExpression = 'TicketNumber' AND @ipv_SortDirection = 'ASC' THEN y.TicketNumber END ASC,
    CASE WHEN @ipv_SortExpression = 'TicketNumber' AND @ipv_SortDirection = 'DESC' THEN y.TicketNumber END DESC,             
    CASE WHEN @ipv_SortExpression = 'AccountNumber' AND @ipv_SortDirection = 'ASC' THEN y.AccountNumber END ASC,
    CASE WHEN @ipv_SortExpression = 'AccountNumber' AND @ipv_SortDirection = 'DESC' THEN y.AccountNumber END DESC,             
    CASE WHEN @ipv_SortExpression = 'OpenDate' AND @ipv_SortDirection = 'ASC' THEN y.OpenDate END ASC,
    CASE WHEN @ipv_SortExpression = 'OpenDate' AND @ipv_SortDirection = 'DESC' THEN y.OpenDate END DESC                             ) AS RowNumber,
y.TicketID,
y.TicketNumber,
y.AccountID,
 y.SkillID
FROM ( SELECT 
    t.TicketID,
    t.TicketNumber,
    t.AccountID,
    t.SkillID  FROM someTable t )  AS y

) AS x WHERE x.RowNumber BETWEEN @startIdx AND @endIdx 
Run Code Online (Sandbox Code Playgroud)

请注意我已经省略了一些字段来缩短查询.这可以正常工作,并且在调用过程时,结果集将正确返回.现在我需要在结果集中添加一条额外的记录.我尝试了一个Union查询,但由于某种原因它打破了排序,结果集总是以相同的顺序返回...

SELECT x.TicketID,
 x.TicketNumber,
 x.AccountID,
 x.SkillID
FROM (
SELECT  ROW_NUMBER() OVER(ORDER BY
    CASE WHEN @ipv_SortExpression = 'TicketNumber' AND @ipv_SortDirection = 'ASC' THEN y.TicketNumber END ASC,
    CASE WHEN @ipv_SortExpression = 'TicketNumber' AND @ipv_SortDirection = 'DESC' THEN y.TicketNumber END DESC,             
    CASE WHEN @ipv_SortExpression = 'AccountNumber' AND @ipv_SortDirection = 'ASC' THEN y.AccountNumber END ASC,
    CASE WHEN @ipv_SortExpression = 'AccountNumber' AND @ipv_SortDirection = 'DESC' THEN y.AccountNumber END DESC,             
    CASE WHEN @ipv_SortExpression = 'OpenDate' AND @ipv_SortDirection = 'ASC' THEN y.OpenDate END ASC,
    CASE WHEN @ipv_SortExpression = 'OpenDate' AND @ipv_SortDirection = 'DESC' THEN y.OpenDate END DESC                             ) AS RowNumber,
y.TicketID,
y.TicketNumber,
y.AccountID,
 y.SkillID
FROM ( SELECT 
    t.TicketID,
    t.TicketNumber,
    t.AccountID,
    t.SkillID  FROM someTable t )  AS y

) AS x WHERE x.RowNumber BETWEEN @startIdx AND @endIdx 
    UNION 
SELECT 
    z.TicketID
    z.TicketNumber
    z.AccountID
    z.SkillID
FROM (

SELECT TOP 1 
    tix.biTicketID as TicketID
    , tix.vcTicketID as TicketNumber
    , tix.biAccountID as AccountID
    , tix.siSkillID as SkillID
FROM someOtherTable tix ORDER BY tix.ActionDate ) As z
Run Code Online (Sandbox Code Playgroud)

此查询会中断网格上的排序.这就像程序完全忽略了我传入的排序标准.我先尝试放置较小的查询,然后联合较大的查询,仍然没有运气.任何人都可以看到我做错了什么或我如何解决这个问题?客户想要这个新功能,但他们不想牺牲排序.我怎样才能正确完成任务?非常感谢任何建议或提示.

干杯,〜在圣地亚哥

Joe*_*lli 6

如果要对结果进行排序,则需要在整个结果集上使用ORDER BY.

(Query A)
UNION 
(Query B)
ORDER BY xxx
Run Code Online (Sandbox Code Playgroud)