1から90000のシーケンス番号を持つテーブルがあります したがって、シーケンス番号に値を自動的に割り当てる方法を知りたがっています たとえば1から1000のように1000バケツ以下になる 2000バケツ以下で1001から2000まで など、最大90000レコード。SQLクエリのシーケンス番号の集約
答えて
あなたは、1000で割り、床にそれを、そして1000で、それをバック掛けることができます:
SELECT 1000*FLOOR(num/1000) + 1, COUNT(*)
FROM mytable
GROUP BY FLOOR(num/1000)
私はこれが私が探しているものだと思っていない、私はそれをこの方法で欲しいと思うMureinik 1000から1000として表示される必要があります1001から2000それは2000年まででなければならないので、最大90000まで、 – sweety
@sweety私が編集して固定した1つのエラー。それがあなたが意味するものでない場合は、あなたの質問を編集して実際の結果を追加して、それがより明確になるようにしてください。 – Mureinik
select * from function(1,1000,1000) 共用体 select * from fucntion(1001,2000,2000)ここでは、最初の値が開始点、2番目の値が終了点、3番目の値がバケット内のアイテム私はそれが90000までそれをしたい – sweety
次のコードは、それがCEILINGと文字通り0から90Kに働くアルゴリズムを使用して、あなたは何をしたいんあなたは小数ラウンドが0
テストデータ
declare @tbl table(num decimal)
insert into @tbl
select 1 union
select 999 union
select 1000 union
select 1001 union
select 2001 union
select 3001 union
select 9999 union
select 10000 union
select 10001 union
select 15001 union
select 25001 union
select 77006 union
select 80000 union
select 90000
に設定されているintを使用している場合
NUMがDECIMAL
でなければならないことを考えます それは浮気だようなクエリ
SELECT distinct
num,
CASE WHEN num <= 10000 THEN 1000*CEILING(num/1000)
WHEN num <= 20000 THEN 10000 + 1000*CEILING((num-10000)/1000)
WHEN num <= 30000 THEN 20000 + 1000*CEILING((num-20000)/1000)
WHEN num <= 40000 THEN 30000 + 1000*CEILING((num-30000)/1000)
WHEN num <= 50000 THEN 40000 + 1000*CEILING((num-40000)/1000)
WHEN num <= 60000 THEN 50000 + 1000*CEILING((num-50000)/1000)
WHEN num <= 70000 THEN 60000 + 1000*CEILING((num-60000)/1000)
WHEN num <= 80000 THEN 70000 + 1000*CEILING((num-70000)/1000)
WHEN num <= 90000 THEN 80000 + 1000*CEILING((num-80000)/1000)
ELSE 0
END
FROM @tbl
結果
1 1000
999 1000
1000 1000
1001 2000
2001 3000
3001 4000
9999 10000
10000 10000
10001 11000
15001 16000
25001 26000
77006 78000
80000 80000
90000 90000
これは私を助けたVictor – sweety
@スウィーティー、それが助けてくれたことを知ってよかったので、私たちが誰かを助けるために正しい答えとしてマークしてください。 –
Modulo (%)オペレータがこのような何かのために最適です... そう簡単に、それは感じています。
WITH
cte_n1 (n) AS (SELECT 1 FROM (VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) n (n)),
cte_n2 (n) AS (SELECT 1 FROM cte_n1 a CROSS JOIN cte_n1 b),
cte_n3 (n) AS (SELECT 1 FROM cte_n2 a CROSS JOIN cte_n2 b),
Sequense (n) AS (
SELECT TOP 90000
ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
FROM
cte_n3 a CROSS JOIN cte_n3 b
)
SELECT
SequenseNumber = s.n,
GroupNumber = s.n - (s.n % 1000)
FROM
Sequense s;
結果...
SequenseNumber GroupNumber
-------------------- --------------------
1 0
2 0
3 0
4 0
5 0
6 0
.........................
997 0
998 0
999 0
1000 1000
1001 1000
1002 1000
1003 1000
1004 1000
1005 1000
1006 1000
1007 1000
1008 1000
1009 1000
1010 1000
.........................
89990 89000
89991 89000
89992 89000
89993 89000
89994 89000
89995 89000
89996 89000
89997 89000
89998 89000
89999 89000
90000 90000
(90000 rows affected)
私は何ジェイソンが掲示するOPが探しているものであると仮定するつもりです。これはちょうどこのタイプのもののために開発されたgetnumsABを使ったわずかなバリエーションです。
select rn, n1, n2 from dbo.getnumsAB(0,90000,1000,1);
これが返されます:
rn n1 n2
----- -------- --------
1 0 1000
2 1000 2000
3 2000 3000
4 3000 4000
....
87 86000 87000
88 87000 88000
89 88000 89000
90 89000 90000
私の解決策最初のノートこのクエリを理解するために
サンプル・データ
if object_id('tempdb..#yourdata') is not null drop table #yourdata;
select SequenceNumber = rn
into #yourdata
from dbo.GetNumsAB(1,90000,1,1);
create unique clustered index uq_cl_yourdata on #yourdata(SequenceNumber);
:まず、我々はいくつかのサンプルデータを作成するために使用します
解決策
select y.SequenceNumber, GroupNumber = n1
from #yourdata y
join dbo.getnumsAB(0,90000,1000,1) gn
on y.SequenceNumber >= n1 and y.SequenceNumber < n2;
私が何かを紛失していない場合は、単にケースステートメントを使用していませんか?
選択の場合 = 1000シーケンス< その後、 '1000' ときシーケンス< = 2000> = 1001 し、 '2000'
というように9000まで?
Sequence <= 1000の場合はシーケンスを選択し、Sequence <= 2000、Sequence> = 1001の場合は '1000'、次に '2000' – Will
- 1. SQL番号、要約クエリ
- 2. SQLクエリ集約
- 3. T-SQL集約クエリ
- 4. SQL Oracle /集約クエリ
- 5. 集約エラーSQLクエリ
- 6. SQL Serverの条件付きシーケンス番号
- 7. シーケンス集約
- 8. Oracle SQLクエリのステップ番号
- 9. レコード番号別のSQLクエリ
- 10. SQL表シーケンス番号が最大
- 11. Pyschools番号シーケンス
- 12. rtph264payシーケンス番号
- 13. Sqlの電話番号の制約
- 14. リストのリストのシーケンス番号
- 15. ウィンドウサイズとシーケンス番号
- 16. シーケンス番号がR
- 17. SIPダイアログのCSeqシーケンス番号
- 18. NHibernate - 子オブジェクトのシーケンス番号
- 19. テーブル内のシーケンス番号
- 20. GNUでxargsのシーケンス番号
- 21. SSIS 2008のシーケンス番号
- 22. シーケンス番号の生成は
- 23. 他の集約クエリ内の集約サブクエリ
- 24. ハスケル - 予約番号ツリーの番号
- 25. cakephpの集約可能な集約クエリ
- 26. 集計の集約クエリ
- 27. シーケンス番号を見つけるためのSQL
- 28. SQL Server:自動生成カスタム形式のシーケンス番号
- 29. シーケンス番号計算TCP
- 30. FIX内部シーケンス番号
あなたはSQL Serverの 'SEQUENCE'オブジェクトを指していますか? – Dai
私は1,2という値を持つシーケンスとして名前のついたフィールドを持っています....90000、その値のために私は1から1000のようなグループでデータを割り当てる必要があります1000と1001から2000は2000の下に落ちる必要がありますなど – sweety
あなたの質問は全く明確ではありません。これについて他の人の視点から考える。ここで何をしたいのか分かりません。 –