我正在尝试按如下方式合并两个查询(别名是我解决该问题的尝试之一);
SELECT a.Day, a.[Away Days], a.[Office Days]
FROM (SELECT DATENAME(dw, Date) AS 'Day', SUM(Hours)/8 AS 'Away Days', NULL AS 'Office Days'
FROM TimesheetDays
WHERE id_LineItem IN
(SELECT idLineItem FROM TimesheetLineItems
WHERE id_Timesheet IN
(SELECT idTimesheet
FROM Timesheets
WHERE id_User = 314)
AND id_Leave IS NOT NULL AND id_Leave != 4)
AND Date < GETDATE()
GROUP BY DATENAME(dw,Date)) a
UNION
SELECT b.Day, b.[Away Days], b.[Office Days]
FROM (SELECT DATENAME(dw, Date) AS 'Day', NULL AS 'Away Days', SUM(Hours)/8 AS 'Office Days'
FROM TimesheetDays
WHERE id_LineItem IN
(SELECT idLineItem FROM TimesheetLineItems
WHERE id_Timesheet IN
(SELECT idTimesheet
FROM Timesheets
WHERE id_User = 314)
AND Offshore = 0 AND (id_Leave IS NULL OR id_Leave != 4))
AND Date < GETDATE()
GROUP BY DATENAME(dw,Date)) b
问题在于这没有进行适当的合并。我想知道是否是Group By破坏了事情,但是我不这么认为吗?
这是一个示例结果;
Day Away Days Office Days
Friday NULL 23.0125
Friday 7 NULL
Monday NULL 24
Monday 6 NULL
Thursday NULL 26
Thursday 5.5 NULL
Tuesday NULL 25.9375
Tuesday 7.5 NULL
Wednesday NULL 26.05
Wednesday 8 NULL
我正在寻找的是两个值都在同一行,而不是具有NULL,而且我不太确定为什么会发生这种情况(对它的理解以及解决方案将不胜感激)。
我想保留别名,因为我想添加第4列以及比率和其他可能的东西也很好。
您可以将两者结合使用,并使用相同的逻辑。
SELECT a.Day, ISNULL(a.[Away Days],b.[Away Days]) as [Away Days], ISNULL(a.[Office Days],b.[Office Days]) as [Office Days]
FROM (SELECT DATENAME(dw, Date) AS 'Day', SUM(Hours)/8 AS 'Away Days', NULL AS 'Office Days'
FROM TimesheetDays
WHERE id_LineItem IN
(SELECT idLineItem FROM TimesheetLineItems
WHERE id_Timesheet IN
(SELECT idTimesheet
FROM Timesheets
WHERE id_User = 314)
AND id_Leave IS NOT NULL AND id_Leave != 4)
AND Date < GETDATE()
GROUP BY DATENAME(dw,Date)) a
JOIN (SELECT DATENAME(dw, Date) AS 'Day', NULL AS 'Away Days', SUM(Hours)/8 AS 'Office Days'
FROM TimesheetDays
WHERE id_LineItem IN
(SELECT idLineItem FROM TimesheetLineItems
WHERE id_Timesheet IN
(SELECT idTimesheet
FROM Timesheets
WHERE id_User = 314)
AND Offshore = 0 AND (id_Leave IS NULL OR id_Leave != 4))
AND Date < GETDATE()
GROUP BY DATENAME(dw,Date)) b ON a.Day = b.Day
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句