2011-06-15 3 views
0

J'ai besoin d'aide pour une requête et j'ai développé un petit exemple.Aide avec une requête - TSQL

Table1 
------------------------------- 
ref-id Name 
1   Project 1 

Table2 
--------------------------- 
ref-id log_stamp  log_type 
1   06/06/2011  1 
1   06/14/2011  2 
1   06/15/2011  2 
1   06/16/2011  2 
1   06/18/2011  3 

------------------------------------------------------ 
Result 
-------------------------------------------------------- 
ref-id start_date  latest_comment  completion_date 
1   06/06/2011  06/16/2011   06/18/2011 

So we join Table1 with table2 on ref-id column. 
Log_type of 1 - links to start_date 
Log_Type of 2 - links to comments...we get the latest date for log_type of 2 
Log_type of 3 - link to completion date. 
+0

Stop thinking de celui-ci ... la tension va disparaître ... En cas de doute comment aider ... La philosophie est le meilleur outil :) – Mulki

Répondre

0

Effectuez trois requêtes distinctes, une pour chaque type de journal et associez-les ensemble. Vous pouvez utiliser des colonnes fictives factices afin que les types de données s'alignent.

0

quelque chose comme:

select ref_id, 
startdate.log_stamp as start_date, 
max(comment.log_stamp) as latest_comment, 
completeddate.log_stamp as completion_date 
from table1 t, 
table2 startdate, 
table2 comment, 
table2 completeddate 
where startdate.ref_id = t.ref_id 
and comment.ref_id = t.ref_id 
and completed_date.ref_id = t.ref_id 
and startdate.log_type = 1 
and comment.log_type = 2 
and completeddate.log_type = 3 
group by 
ref_id, 
startdate.log_stamp, 
completeddate.log_stamp 

Vous devrez peut-être une jointure externe sur completeddate et commentaire si ces valeurs ne sont pas toujours présents ...

1

Vous pouvez pivoter;

;with T as (select 
    Table1.[ref-id], 
    log_stamp, 
    case log_type 
     when 1 then 'start_date' 
     when 2 then 'latest_comment'  
     when 3 then 'completion_date' 
    end as title 
from 
    Table1 inner join Table2 on Table1.[ref-id] = Table2.[ref-id] 
) 
select * from T 
pivot (
    max(log_stamp) 
    for title IN ([start_date],[latest_comment],[completion_date]) 
) pvt 
+0

désolé, ma modification ne va pas, s'il vous plaît jeter ma modification. Votre message original est correct. Je l'ai testé et cela fonctionne correctement –