2016-06-22 2 views
2

SQL Server用にこのSQL文を書く方法は今はわかりません。SQLでグルーピングする

私は2つのテーブルがあります。

お客様

ID | Name | Prename 
---------------------- 
1 Miller Thomas 
.... 

ステップ

ID | FK_customer | step | created 
------------------------------------ 
1 1    A  2010-02-03 
2 1    B  2011-09-12 
.... 

私はそれに参加しようとすると、私はこれを取得:

Name | A_date  | B_date 
---------------------------------- 
Miller 2010-02-03 NULL 
Miller NULL   2011-09-12 

私が欲しいのはこれです:

Name | A_date  | B_date 
--------------------------------- 
Miller 2010-02-03 2011-09-12 

誰が私に光を表示することができますか?

+1

私達にあなたのクエリを表示します。 –

+0

名前ごとに日付の列が1つしかありませんか? (または倍数の場合は、トップのもので十分でしょうか?) –

答えて

8

あなたはこのために条件付き集約を使用することができます。

SELECT c.Name, 
     MAX(CASE WHEN step = 'A' THEN created END) AS A_date, 
     MAX(CASE WHEN step = 'B' THEN created END) AS B_date 
FROM customer c 
JOIN steps s ON c.Id = s.FK_customer 
GROUP BY c.Name 
+0

今私は自分のエラーを見つける必要があります... – user2849380

1
SELECT c.Name, A.A_date, B.B_date 
FROM Customer c 
CROSS APPLY 
(
    SELECT MAX(created) AS A_date 
    FROM steps s 
    WHERE s.FK_customer = c.Id 
    AND s.step = 'A' 
)AS A 
CROSS APPLY 
(
    SELECT MAX(created) AS B_date 
    FROM steps s 
    WHERE s.FK_customer = c.Id 
    AND s.step = 'B' 
)B 
+0

そのより複雑な質問よりも努力のために1票を与えます。 :) –

関連する問題