2017-04-26 12 views
2

インポートしたExcelシートSQL server.iには、1つのテーブルが選択されています。この表には多くの行の値があります。この行では、単一の従業員がこのテーブルに何度も来ています。私はこの列の単一従業員がすべての値を繰り返し列から利用できるようにしたい。私は参考としてサンプルデータを表示します。SQLクエリーの重複カラムからすべての値を1列だけ重複除去します。

Name E1 E2 E3 E4 E5 
    Jeni 1 0 0 0 0 
    Jeni 0 0 2 0 0 
    Jeni 0 5 0 0 3 
    Priya 0 3 0 0 0 
    Priya 0 0 0 0 3 
    Priya 0 0 7 0 0 
    Priya 10 0 0 0 0 

私のテーブル表を選択した後のように見える私の結果は、私はこのようになりたい

Name E1 E2 E3 E4 E5 Total 
jeni 1 5 2 0 3 11 
Priya 10 3 7 0 3 23 

ようにする必要があります。私は少しクリアすることを願っています。どのようにこれを達成することができます。また、BEST TUTORIALを参照してください。非常に短期間のSQLの学習。進んでください。私はウィルが助けて欲しい。私は新しいSQL Serverです。

答えて

5
CREATE TABLE #Table1 
    ([Name] varchar(5), [E1] int, [E2] int, [E3] int, [E4] int, [E5] int) 
; 

INSERT INTO #Table1 
    ([Name], [E1], [E2], [E3], [E4], [E5]) 
VALUES 
    ('Jeni', 1, 0, 0, 0, 0), 
    ('Jeni', 0, 0, 2, 0, 0), 
    ('Jeni', 0, 5, 0, 0, 3), 
    ('Priya', 0, 3, 0, 0, 0), 
    ('Priya', 0, 0, 0, 0, 3), 
    ('Priya', 0, 0, 7, 0, 0), 
    ('Priya', 10, 0, 0, 0, 0) 
; 

SELECT *,A.E1+A.E2+A.E3+A.E4+A.E5 AS 'TOTAL' FROM (SELECT NAME, SUM(E1) E1 ,SUM(E2) E2 ,SUM(E3) E3 ,SUM(E4) E4 ,SUM(E5) E5 FROM #TABLE1 GROUP BY NAME)A 

出力

NAME E1 E2 E3 E4 E5 TOTAL 
Jeni 1 5 2 0 3 11 
Priya 10 3 7 0 3 23 
+2

)'の代わりに 'MAX()'の、場合に非ゼロの値が負になることができ+1 –

+0

@TimBiegeleisenは1より多くのあなたの先生 – sripriya

+0

@Chanukyaに感謝助けて。私は計算したいTotal value separate従業員合計jeniのように合計11とPr​​iya 23.私の質問を更新しましたいくつかのアイデアを提供してください値を取得する方法 – sripriya

3

あなたが探しているものは別グループです。

あなたが探している結果を得るために、私はあなたが記述したテーブルを作って、グループを行い、整数値を合計しました。あなたは `SUMを(使用する場合があります

select name, sum(E1),sum(E2),sum(E3),sum(E4),sum(E5) from Test Group by name 
0
;With cte(Name,E1,E2,E3,E4,E5) 
AS 
(
SELECT 'Jeni' ,1 ,0 , 0, 0, 0 Union all 
SELECT 'Jeni' ,0 ,0 , 2, 0, 0 Union all 
SELECT 'Jeni' ,0 ,5 , 0, 0, 3 Union all 
SELECT 'Priya',0 ,3 , 0, 0, 0 Union all 
SELECT 'Priya',0 ,0 , 0, 0, 3 Union all 
SELECT 'Priya',0 ,0 , 7, 0, 0 Union all 
SELECT 'Priya',10,0 , 0, 0, 0 
) 
SELECT Name,E1,E2,E3,E4,E5,Total FROM 
(
SELECT *,Row_number()Over(Partition by Name order by Name)AS Seq From 
(
SELECT Name,SUM(E1)E1, 
SUM(E2)E2, 
SUM(E3)E3, 
SUM(E4)E4, 
SUM(E5)E5, 
SUM(E1+E2+ E3+ E4+E5) AS Total 
FROM cte 
Group by Name 
)Dt 
)AS Final 
WHERE Final.Seq=1 
関連する問題