2017-04-09 21 views
-1

私は次のスクリプトは、テーブルを作成し、それを移入するために使用することができMS SQLグループ行の開始と終了に基づいて

Column1  | Column2 
CustomerID | 22 
CustomerName | ”ABC” 
Responsible | ”Allan” 
CustomerID | 23 
CustomerName | ”DEF” 
Responsible | ”Jessica” 
CustomerID | 24 
CustomerName | ”GHI” 
Responsible | ”Paul” 

3,3の繰り返し行を次のようになり、テーブルを...持っていますサンプルデータと...

CREATE TABLE Responsible 
    ([ RowType ] VARCHAR(12), 
     [ Value ] VARCHAR(9)) 
; 

INSERT INTO Responsible 
    ([RowType], 
     [ Value ]) 
VALUES 
    ('CustomerID', 
     '22'), 
    ('CustomerName', 
     'ABC'), 
    ('Responsible', 
     'Allan'), 
    ('CustomerID', 
     '23'), 
    ('CustomerName', 
     'DEF'), 
    ('Responsible', 
     'Jessica'), 
    ('CustomerID', 
     '24'), 
    ('CustomerName', 
     'GHI'), 
    ('Responsible', 
     'Paul'); 

そして、私はこのようになりますテーブルのようにそれを取得したいと思い:

CustomerID | CustomerName | Responsible 
22   | ABC   | Allan 
23   | DEF   | Jessica 
24   | GHI   | Paul  

何最善の方法はありますか?

+0

どのDBエンジンを新しいテーブルを作成しますか?あなたのテーブルにグループ化できるフィールドはありませんか? – Blag

+1

どのDBMSを使用していますか? Postgres?オラクル? –

+2

これはできません。 SQLテーブルは、*順序付けられていない*行を表します。順序を指定する列がなければ、行を確実に接続することはできません。 –

答えて

0

私はそれがSQL Serverで、次のように動作するようになりました。私は他の選択肢は見当たりませんが、カーソルを使って一度に1つの行を下ろすのです。 以下のスクリプトは、独自の状況でのみ動作します。

USE [YOURDATABASE NAME GOES HERE] 
GO 

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[Table_2](
    [CustomerID] [int] NULL, 
    [CustomerName] [varchar](50) NULL, 
    [Responsible] [varchar](50) NULL 
) ON [PRIMARY] 

GO 

データの挿入のINTO TABLE

DECLARE @CustomerId INT 
DECLARE @CustomerName VARCHAR(50) 
DECLARE @Responsible VARCHAR(50) 
DECLARE myCursor CURSOR 
FOR SELECT Column2 FROM Table_1; 
OPEN myCursor; 
FETCH NEXT FROM myCursor 
INTO @CustomerId; 

FETCH NEXT FROM myCursor 
INTO @CustomerName; 

FETCH NEXT FROM myCursor 
INTO @Responsible; 

WHILE @@FETCH_STATUS = 0 
BEGIN 
     INSERT INTO [dbo].[Table_2](CustomerID,CustomerName,Responsible) 
     VALUES (@CustomerId,@CustomerName,@Responsible) 

     FETCH NEXT FROM myCursor 
     INTO @CustomerId; 

     FETCH NEXT FROM myCursor 
     INTO @CustomerName; 

     FETCH NEXT FROM myCursor 
     INTO @Responsible; 
END 
CLOSE myCursor; 
DEALLOCATE myCursor; 
GO 
+0

それは動作します!多くのおかげで:o) – FredrikUmea

+0

フレドリック、あなたは大歓迎です。 – Jason

0

編集、SQL Serverのバージョン:

クエリ10

select CustomerID, CustomerName, Responsible 
from (
select row_number() over(order by k) as id , v as CustomerID 
from t1 
where k ='CustomerID') tt1 
inner join (
select row_number() over(order by k) as id , v as CustomerName 
from t1 
where k ='CustomerName') tt2 
on tt1.id = tt2.id 
inner join (
select row_number() over(order by k) as id , v as Responsible 
from t1 
where k ='Responsible') tt3 
on tt1.id = tt3.id 

Results

| CustomerID | CustomerName | Responsible | 
|------------|--------------|-------------| 
|   22 |   ABC |  Allan | 
|   23 |   DEF |  Jessica | 
|   24 |   GHI |  Paul | 

これは私が考えて欲しいものですか?

SQL Fiddle

のMySQL 5.6スキーマのセットアップ

CREATE TABLE t1 
    (`k` varchar(12), `v` varchar(9)) 
; 

INSERT INTO t1 
    (`k`, `v`) 
VALUES 
    ('CustomerID', '22'), 
    ('CustomerName', 'ABC'), 
    ('Responsible', 'Allan'), 
    ('CustomerID', '23'), 
    ('CustomerName', 'DEF'), 
    ('Responsible', 'Jessica'), 
    ('CustomerID', '24'), 
    ('CustomerName', 'GHI'), 
    ('Responsible', 'Paul') 
; 

クエリ1

set @v1 = 0, @v2 = 0, @v3 = 0 

クエリ2

select CustomerID, CustomerName, Responsible 
from (
    select @v1:= @v1+1 as id , v as CustomerID 
    from t1 
    where k ='CustomerID' 
) tt1 
inner join (
    select @v2:= @v2+1 as id , v as CustomerName 
    from t1 
    where k ='CustomerName' 
) tt2 
    on tt1.id = tt2.id 
inner join (
    select @v3:= @v3+1 as id , v as Responsible 
    from t1 
    where k ='Responsible' 
) tt3 
    on tt1.id = tt3.id; 

Results

| CustomerID | CustomerName | Responsible | 
|------------|--------------|-------------| 
|   22 |   ABC |  Allan | 
|   23 |   DEF |  Jessica | 
|   24 |   GHI |  Paul | 
+0

多くのありがとう、それは本当に感謝していますが、私は自分自身のばかを作っている危険性があります。私はMySQLではなく、Microsoft SQLでこれを作っています。構文はどう違うのですか? – FredrikUmea

+0

@FredrikUmea編集、ここMS-SQL版です;) – Blag

関連する問題