我有 3 个查询,最终可以获取每日财务信息。我想做的是将我需要的列合并为 1 个输入。我尝试做派生表,但它非常草率并且不起作用。有人对如何将这 3 个结合起来在 1 行上提供输出有任何建议吗?
这是我的疑问:
SELECT ReportCategoryID, ReportCategoryName, PrintOrder, QTY, NetAmt, customers, Average
FROM dbo.fRevenueSummary(@startdate, @enddate) AS fRevenueSummary_1
第二个查询:
SELECT COUNT(*) AS count, SUM(TicketsDetails.dblTotal) AS Merch_Total
FROM TicketsDetails INNER JOIN
Surcharges ON TicketsDetails.Reference_ID = Surcharges.Surcharge_ID INNER JOIN
SurchargesTypes ON Surcharges.lSurchargeTypeID = SurchargesTypes.lSurchargeTypeID
WHERE (TicketsDetails.dtCreated BETWEEN @startdate AND @enddate) AND (SurchargesTypes.lSurchargeTypeID = '2') AND (TicketsDetails.bPaid = 1) AND
(TicketsDetails.Detail_Type_ID = 3) AND (NOT (TicketsDetails.sDescription = N'TIP'))
第三个查询:
SELECT SUM(dblRegLabor) AS Regular_Amount, SUM(dblOTLabor) AS OT_Amount
FROM TimeClock
WHERE (dtTimeIn > @startdate) AND (dtTimeOut < @enddate) AND (sDept = '1') OR
(dtTimeIn > @startdate) AND (dtTimeOut < @enddate) AND (sDept = '2') OR
(dtTimeIn > @startdate) AND (dtTimeOut < @enddate) AND (sDept = '3') OR
(dtTimeIn > @startdate) AND (dtTimeOut < @enddate) AND (sDept = '4') OR
(dtTimeIn > @startdate) AND (dtTimeOut < @enddate) AND (sDept = '5') OR
(dtTimeIn > @startdate) AND (dtTimeOut < @enddate) AND (sDept = '6') OR
(dtTimeIn > @startdate) AND (dtTimeOut < @enddate) AND (sDept = '7')
最佳答案
最简单的方法是这样的
SELECT *
FROM
(
SELECT ReportCategoryID, ReportCategoryName, PrintOrder, QTY, NetAmt, customers, Average
FROM dbo.fRevenueSummary(@startdate, @enddate) AS fRevenueSummary_1
)
,
(
SELECT COUNT(*) AS count, SUM(TicketsDetails.dblTotal) AS Merch_Total
FROM TicketsDetails INNER JOIN
Surcharges ON TicketsDetails.Reference_ID = Surcharges.Surcharge_ID INNER JOIN
SurchargesTypes ON Surcharges.lSurchargeTypeID = SurchargesTypes.lSurchargeTypeID
WHERE (TicketsDetails.dtCreated BETWEEN @startdate AND @enddate) AND (SurchargesTypes.lSurchargeTypeID = '2') AND (TicketsDetails.bPaid = 1) AND
(TicketsDetails.Detail_Type_ID = 3) AND (NOT (TicketsDetails.sDescription = N'TIP'))
)
,
(
SELECT SUM(dblRegLabor) AS Regular_Amount, SUM(dblOTLabor) AS OT_Amount
FROM TimeClock
WHERE (dtTimeIn > @startdate) AND (dtTimeOut < @enddate) AND (sDept = '1') OR
(dtTimeIn > @startdate) AND (dtTimeOut < @enddate) AND (sDept = '2') OR
(dtTimeIn > @startdate) AND (dtTimeOut < @enddate) AND (sDept = '3') OR
(dtTimeIn > @startdate) AND (dtTimeOut < @enddate) AND (sDept = '4') OR
(dtTimeIn > @startdate) AND (dtTimeOut < @enddate) AND (sDept = '5') OR
(dtTimeIn > @startdate) AND (dtTimeOut < @enddate) AND (sDept = '6') OR
(dtTimeIn > @startdate) AND (dtTimeOut < @enddate) AND (sDept = '7')
)
但如果它们之间没有关系,您将返回笛卡尔积。
我认为没有办法在没有笛卡尔积的情况下组合 3 个不同的查询。
关于sql - 如何将 3 个查询合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13916521/