Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 SQL波形排序_Sql Server 2008_Tsql - Fatal编程技术网

Sql server 2008 SQL波形排序

Sql 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

以下是下表的记录列表。我需要在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.00
另一种不需要窗口函数并创建更简单的执行计划的方法:

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;