2016-05-05 9 views
0

まず、私の自然言語ではないので、間違いや誤解をお詫びしたいと思います。あるテーブルから別のテーブルに異なる構造のデータをエクスポートする

コンテキスト:1つのテーブルに格納されたデータをプルする必要があります(実際には2つのテーブルを結合した結果)、レポートに表示する必要があります。データを表示するために私が達成したいことを以下に見てください。

レッツは、ソース表がそれで、以下の構造とデータを持っていることを言う: Source Table

私は、結果として、その中に次のような構造とデータを持つテーブルを持っているしたいと思います:

Result table

結果表には、日曜日から土曜日(3つの異なる曜日)の列があります。

ソーステーブルに対してカーソルを使用して結果テーブル(一時テーブル)にデータを注入することで、私の問題を解決しました。しかし、私はカーソルの使用を避けたいと思います。

P.S.私はSQlServer 2014をdbms、Visual Studio2015を使ってレポートを設計しています。

+0

ロジックを変換して別の列に変換する必要がある場合は、入力してください。 – piyushj

答えて

0
SELECT code, 
     [SUN_nCollects] = MAX(CASE WHEN day = 'SUN' THEN nCollects END), 
     [SUN_nDels]  = MAX(CASE WHEN day = 'SUN' THEN nDels  END), 
     [SUN_%]   = MAX(CASE WHEN day = 'SUN' THEN percentage END), 
     [MON_nCollects] = MAX(CASE WHEN day = 'MON' THEN nCollects END), 
     [MON_nDels]  = MAX(CASE WHEN day = 'MON' THEN nDels  END), 
     [MON_%]   = MAX(CASE WHEN day = 'MON' THEN percentage END), 
     . . . . 
FROM source 
GROUP BY code 
0

テストデータの作成。

CREATE TABLE #TableName (Code int, percentage int, nCollects int, nDels int, [day] varchar(3)) 
INSERT INTO #TableName (Code, percentage, nCollects, nDels, [day]) 
VALUES 
('101','100','4','4','SUN') 
,('102','100','4','4','SUN') 
,('104','100','6','6','MON') 
,('101','50','4','8','TUE') 
,('102','50','4','8','TUE') 
,('104','100','2','2','TUE') 
,('105','50','1','2','TUE') 
,('106','100','2','2','TUE') 
,('106','50','2','4','WED') 

あなたが望む答えを与えるT-SQL。

SELECT 
a.Code 
,ISNULL(SUM(CASE WHEN a.day = 'SUN' THEN a.nCollects END),0) SUN_nCollects 
,ISNULL(SUM(CASE WHEN a.day = 'SUN' THEN a.nDels END),0) SUN_nDels 
,CONVERT(int,(ISNULL(SUM(CASE WHEN a.day = 'SUN' THEN a.nCollects END),0)/ISNULL(SUM(CASE WHEN a.day = 'SUN' THEN a.nDels END),1))*100) [SUN%] 
,ISNULL(SUM(CASE WHEN a.day = 'MON' THEN a.nCollects END),0) MON_nCollects 
,ISNULL(SUM(CASE WHEN a.day = 'MON' THEN a.nDels END),0) MON_nDels 
,CONVERT(int,(ISNULL(SUM(CASE WHEN a.day = 'MON' THEN a.nCollects END),0)/ISNULL(SUM(CASE WHEN a.day = 'MON' THEN a.nDels END),1))*100) [MON%] 
,ISNULL(SUM(CASE WHEN a.day = 'TUE' THEN a.nCollects END),0) TUE_nCollects 
,ISNULL(SUM(CASE WHEN a.day = 'TUE' THEN a.nDels END),0) TUE_nDels 
,CONVERT(int,(ISNULL(SUM(CASE WHEN a.day = 'TUE' THEN a.nCollects END),0)/ISNULL(SUM(CASE WHEN a.day = 'TUE' THEN a.nDels END),1))*100) [TUE%] 
,ISNULL(SUM(CASE WHEN a.day = 'WED' THEN a.nCollects END),0) WED_nCollects 
,ISNULL(SUM(CASE WHEN a.day = 'WED' THEN a.nDels END),0) WED_nDels 
,CONVERT(int,(ISNULL(SUM(CASE WHEN a.day = 'WED' THEN a.nCollects END),0)/ISNULL(SUM(CASE WHEN a.day = 'WED' THEN a.nDels END),1))*100) [WED%] 
FROM #TableName a 
GROUP BY a.Code 
関連する問題