2017-06-15 12 views
1

中1へ2行をマージ:私は私のクエリで次の行を持っているSQL Serverの

enter image description here

私は以下のように提示される1行にこれらの行をマージしたい:

enter image description here

私のテーブルはこのように多くの行を保持していますので、ダイナミックなソリューションは高く評価されます。さらに、Number 1またはNumber 2列にNULL値を持つ行がいくつかあります。

おかげで...

答えて

2

一つの方法は、集計関数を使用しています。

select category, category_2, 
     max(number_1) as number_1, max(number_2) as number_2 
from t 
group by category, category_2; 

それが複数の行を返さないように、あなたはまた、基になるクエリを解決できる可能性があります。それが興味のあるものなら、もう1つ質問と質問してください。

+0

問題は感謝ゴードン、私は基本的なクエリを修正することはできません対処します。 – user2007221

1

キーは何によって、あなたが行うことができます(のはCategoryを想定してみましょう)グループ:一緒にキーを形成

select Category, max(Category2) as Category2, max(number1) as number1, max(number2) as number2 
from table 
group by Category 

Category場合とCategory2、あなたが書くことができる:

select Category, Category2, max(number1) as number1, max(number2) as number2 
from table 
group by Category, Category2 
+1

ステファンありがとう、あなたの答えは両方ともトリックでした... – user2007221

1

これは動作するはずです。これは、これは私がクライアントのクエリから得た情報であるため、QUERY

DECLARE @MERGE TABLE (Category VARCHAR(10), Category_2 VARCHAR(10), 
         Number_1 INT, Number_2 INT) 
INSERT INTO @MERGE VALUES 
('A', 'B', NULL,1), 
('A', 'B', 5,NULL) 

SELECT 
A.Category 
,A.Category_2 
,MAX(A.Number_1) AS Number_1   
,MAX(B.Number_2) AS Number_2 

FROM @MERGE A INNER JOIN @MERGE B 
ON A.Category=B.Category 
WHERE B.Number_2 IS NOT NULL 
AND B.Number_2 IS NOT NULL 
GROUP BY A.Category ,A.Category_2 

複数の行を返すOUTPUT

Category Category_2 Number_1 Number_2 
    A   B   5   1 
関連する問題