Sql server 2008 SQL波形排序
以下是下表的记录列表。我需要在SQL2008中将sql查询从图1转到图2 图2所做的是对权重Desc进行排序,然后在下一个STO值之后进行Asc 我在想,它与Group By和%2有关 *Figure 1* Item SEL STO Weight 1 ABC A 80.00 2 ABC A 65.00 3 ABC A 50.00 4 ABC A 35.00 5 ABC A 20.00 6 ABC B 80.00 7 ABC B 65.00 8 ABC B 50.00 9 ABC B 35.00 10 ABC B 20.00 11 ABC C 80.00 12 ABC C 65.00 13 ABC C 50.00 14 ABC C 35.00 15 ABC C 20.00 16 ABC D 80.00 17 ABC D 65.00 18 ABC D 50.00 19 ABC D 35.00 20 ABC D 20.00Sql server 2008 SQL波形排序,sql-server-2008,tsql,Sql Server 2008,Tsql,以下是下表的记录列表。我需要在SQL2008中将sql查询从图1转到图2 图2所做的是对权重Desc进行排序,然后在下一个STO值之后进行Asc 我在想,它与Group By和%2有关 *Figure 1* Item SEL STO Weight 1 ABC A 80.00 2 ABC A 65.00 3 ABC A 50.00 4 ABC A
另一种不需要窗口函数并创建更简单的执行计划的方法:
SELECT *
FROM sampleData
ORDER BY STO, [Weight] * CASE ASCII(STO)%2 WHEN 1 THEN [Weight] ELSE -[Weight] END;
似乎您希望更改其他STO组的排序方向。最简单的方法可能是使用并集,但它将是粗略的。在这种情况下,如果wght是一个数字列,则当rownum%2=0时,您可能会使用case,然后使用wght else-wght end asc,而不是两个case语句作为优化。是的,这将有所帮助
;with cte
as
(select *, dense_rank() over (order by sto) as rownum
from #temp
)
select * from cte
order by
rownum,
case when (rownum %2)=0 then wght end asc,
case when (rownum %2)<>0 then wght end desc
SELECT *
FROM sampleData
ORDER BY STO, [Weight] * CASE ASCII(STO)%2 WHEN 1 THEN [Weight] ELSE -[Weight] END;