2016-09-13 28 views
0

SQL不是我的專業知識,但是,如何編寫一個SQL查詢,該查詢從兩個不同記錄獲取值並將它們放在一行中?例如,我對此EmployeeId進行了查詢,並且我需要Vacation_Type列中的輸出值爲2016-07-01(如果存在)Adjust和2016-08-01(對每個員工都存在)的Forward值?所需的輸出將是:將SQL記錄值放在一行中

26, SL, 547.58, -37.42 

Query Output

並不是每個員工將有調整的記錄,他們有當他們在病假帽的調整...而不是每個人都超過了上限。謝謝!

回答

2
select 
    EV.EmployeeID, 
    EV.Vacation_Kind, 
    stuff(( select ', ' + convert(varchar(30), EV1.Value) from EmployeeVacations EV1 
       where EV1.EmployeeID = EV.EmployeeID and EV1.Vacation_Kind = EV.Vacation_Kind 
       and EV1.VacationType in ('Adjust','Forward') and EV1.CreationDate IN (EV.CreationDate, dateadd(month, datediff(month, 0, dateadd(month, 1, EV.CreationDate)), 0)) 
       for xml path('') 
      ), 1, 1, '') 
from 
    EmployeeVacations EV 
where 
    EV.EmployeeID = 26 and EV.Vacation_Kind = 'SL'and VacationType = 'Adjust' 
group by 
    EV.EmployeeID, EV.Vacation_Kind, EV.CreationDate 
+0

可能這項工作,請嘗試 – BhatiaAshish

+0

這一個完美的工作我去掉後「,其中EV.EmployeeID = 26「,並獲得了我需要的所有記錄。謝謝! – RickCJ7

1

由於「調整」記錄不能保證在那裏,所以可以使用LEFT OUTER JOIN。下面的查詢所有員工,但你可以取消這兩條線,如果你真的只希望員工26 ...

SELECT 
    CAST(fwd.EmployeeId AS varchar) + ', ' + 
    fwd.Vacation_Kind + ', ' + 
    CAST(fwd.[Value] as varchar) + 
    CASE WHEN adj.Value IS NULL THEN '' ELSE ', ' + CAST(adj.Value AS varchar) END 
FROM 
    @employeeVacations fwd 
    LEFT OUTER JOIN @employeeVacations adj ON 
     adj.EmployeeId = fwd.EmployeeId) 
     AND 
     adj.Vacation_Kind = 'SL') 
     AND 
     adj.Vacation_Type = 'Adjust' 
     AND 
     adj.CreationDate = '2016-07-01' 
WHERE 
    --fwd.EmployeeId = 26 
    --AND 
    fwd.Vacation_Kind = 'SL' 
    AND 
    fwd.Vacation_Type = 'Forward' 
    AND 
    fwd.CreationDate = '2016-08-01' 
相關問題