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)
此查询会中断网格上的排序.这就像程序完全忽略了我传入的排序标准.我先尝试放置较小的查询,然后联合较大的查询,仍然没有运气.任何人都可以看到我做错了什么或我如何解决这个问题?客户想要这个新功能,但他们不想牺牲排序.我怎样才能正确完成任务?非常感谢任何建议或提示.
干杯,〜在圣地亚哥
如果要对结果进行排序,则需要在整个结果集上使用ORDER BY.
(Query A)
UNION
(Query B)
ORDER BY xxx
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
360 次 |
| 最近记录: |