Cross Tab - Storing different dates (Meeting1, Meeting2, Meeting 3 etc) in the same column

后端 未结 4 2163
夕颜
夕颜 2021-01-06 10:49

I need to keep track of different dates (dynamic). So for a specific Task you could have X number of dates to track (for example DDR1 meeting date, DDR2 meeting date, Due Da

4条回答
  •  佛祖请我去吃肉
    2021-01-06 11:26

    Here is a proper answer, tested with your data. I only used the first two date types, but you'd build this up on the fly anyway.

    Select 
        Tasks.TaskDescription,     
        Min(Case DateType.DateDescription When 'DDR1' Then Tasks_DateType.Date End) As DDR1,     
        Min(Case DateType.DateDescription When 'DDR2' Then Tasks_DateType.Date End) As DDR2
    From
        Tasks_DateType
        INNER JOIN Tasks ON Tasks_DateType.TaskID = Tasks.TaskID
        INNER JOIN DateType ON Tasks_DateType.DateTypeID = DateType.DateTypeID
    Group By
        Tasks.TaskDescription
    

    EDIT

    van mentioned that tasks with no dates won't show up. This is correct. Using left joins (again, mentioned by van) and restructuring the query a bit will return all tasks, even though this is not your need at the moment.

    Select 
        Tasks.TaskDescription,     
        Min(Case DateType.DateDescription When 'DDR1' Then Tasks_DateType.Date End) As DDR1,     
        Min(Case DateType.DateDescription When 'DDR2' Then Tasks_DateType.Date End) As DDR2
    From
        Tasks   
        LEFT OUTER JOIN Tasks_DateType ON Tasks_DateType.TaskID = Tasks.TaskID
        LEFT OUTER  JOIN DateType ON Tasks_DateType.DateTypeID = DateType.DateTypeID
    Group By
        Tasks.TaskDescription
    

提交回复
热议问题