2016-09-30 5 views
2

以下は、以下の表のレコード一覧です。私はSQL 2008の図1から図2のSQLクエリーを必要としています。SQL Wave Sequencing

Figure 2は、Weight Descをソートし、次のSTO値の後にAscに移動しています。

私はグループバイと%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 
 
*Figure 2* 
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 
10  ABC  B  20.00 
9  ABC  B  35.00 
8  ABC  B  50.00 
7  ABC  B  65.00 
6  ABC  B  80.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 
20  ABC  D  20.00 
19  ABC  D  35.00 
18  ABC  D  50.00 
17  ABC  D  65.00 
16  ABC  D  80.00 
+0

あなたはSTOの他のすべてのグループのソート方向を変更したいように思えます。 –

+0

おそらくこれを行う最も簡単な方法は組合ですが、それは総額になります。 – dfundako

答えて

2
;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 
+1

この場合、 'wght'が数値列の場合、2つのcase文の代わりに ' case(rownum%2)= 0 then wght else -wght end asc'を最適化として使用できます。 – Kateract

+0

はい、それは役に立ちます – TheGameiswar

1

何のウィンドウ関数を必要とせず、シンプルな実行計画を作成し、別の方法:

SELECT * 
FROM sampleData 
ORDER BY STO, [Weight] * CASE ASCII(STO)%2 WHEN 1 THEN [Weight] ELSE -[Weight] END; 
関連する問題