2
我有一个存储过程,它自己正常工作。最近的一项要求让我觉得Union查询将会完成我所需要的。这是工作版本。它使用ROW_NUMBER()来实现分页和排序正确Tsql联合查询正在打破我的asp.net gridview排序
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
请注意我ommitted某些领域,缩短查询。这可以正常工作,并且在调用该过程时,结果集将返回正确排序。现在我需要向结果集添加一条附加记录。我尝试了联合查询,但由于某些原因,它打破了排序,结果集总是以相同的顺序返回...
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
此查询断裂排序我的网格。这就像程序完全忽略了我传入的排序标准。我试图先放置较小的查询,然后联合较大的查询,但仍然没有运气。任何人都可以看到我做错了什么,或者我可以如何补救?客户想要这个新功能,但他们不想牺牲排序。我如何正确完成我的任务?感谢任何建议或提示的一堆。
欢呼声中,在圣地亚哥
是的,ORDER BY RowNumber是所有需要在这里结束 – SQLMenace 2010-08-26 20:44:40
是的,顺序rownumber似乎很好地工作。谢谢一堆! – Hcabnettek 2010-08-26 21:06:08