2016-05-30 14 views
1

私は4つの等しい部分に分割する必要があります。与えられた制約(列の内容)に基づいて、適切な4つのテーブルを作成します。データは次のようになります。データをpartiotionするためのSqlクエリ

Field1 | Field2 | Field3 
------------------------ 
d11  d12  d13 
d21  d22  d23 
d31  d32  d43 
d41  d42  d43 
d51  d52  d13 
d61  d62  d63 
d71  d72  d23 
d81  d82  d43 

制約はField3です。私は4つのテーブルを取得する必要があります

**Table1** 


    Field1 | Field2 | Field3 
    ------------------------ 
    d11  d12  d13 
    d51  d52  d13 

**Table2** 

Field1 | Field2 | Field3 
------------------------ 
d21  d22  d23 
d71  d72  d23 


    **Table3** 

    Field1 | Field2 | Field3 
    ------------------------ 
    d31  d32  d43 
    d41  d42  d43 
    d81  d82  d43 

**Table4** 

Field1 | Field2 | Field3 
    ------------------------ 
    d61  d62  d63 

どうすればいいですか?私はgroup byを使って、行ごとにテーブルをトラバースすることを考えました。それは良いです/またはよりよい解決策がある

+1

テーブル間で行を区切るために使用したロジックについて説明できますか? – Mureinik

答えて

-2
CREATE TABLE Table1 AS (
SELECT field1, field2, field3 
FROM table 
where 
WHERE field3 = 'd13') 

CREATE TABLE Table2 AS (
SELECT field1, field2, field3 
FROM table 
where 
WHERE field3 = 'd23') 

....

+0

彼はこの方法で毎回手動ですべてのパーティションを検索する必要があります。 – sagi

+0

@サギそれは4つのテーブルですどのテーブルがどのくらい難しいのですかテーブル – Paparazzi

+0

からField3を選択するそれは最初の文に関係なく常に4つのパーティションになります。そしてこれはこれほど動的ではありません。 – sagi

-1
DECLARE @total INT; 
DECLARE @iterator INT; 

SELECT @total = COUNT(0) 
FROM MyTable 
GROUP BY field3; 

SET @iterator = 1; 

WHILE @iterator <= @total 
BEGIN 
    SELECT s.field1,s.field2,s.field3 
    FROM(
    SELECT field1,field2,field3,DENSE_RANK() OVER(ORDER BY t.Field3) as rank 
    FROM MyTable) temp 
    WHERE s.rank = @iterator); 
    SET @iterator = @iterator + 1; 
END 

これはあなたの全体の結果セットを与えるべきです。

関連する問題