我有3张桌子
DiscountHeader表
HeaderID HeaderName
------------------------
1 DiscountA
DiscountLine表
LineID HeaderID Min Max DiscountPercentage
-----------------------------------------------
1 1 0 1000 1%
2 1 1001 2000 2%
和Branch_Total
CompanyID HeaderID Sales_Total Discount
------------------------------------------------------
B1 1 900 1%
T2 1 1500 2%
还有公司表
CompanyID HeaderID
------------------------
B1 1
T2 1
基本上,我想根据每家公司的销售量给他们折扣。
每个公司都有一个折扣抬头ID,每个抬头都有行。显示他们将获得多少折扣。更多销售,更多折扣。
例如,CompanyId 1仅售出900,而他们的所有权只有1%,因为它小于1000。但是companyID 2售出1500,他们拥有了2%
到目前为止,我做到了
SELECT *
CASE
WHEN B.Sales_Total >V.Min THEN 1
END AS R
FROM Branch_Totals B
JOIN Company H ON H.CompanyID = B.CompanyID
JOIN DiscountLine V ON H.VDHeaderID = V.HeaderID
但是当我说 其中R不为null。 IT无法正常工作。基本上“ AS R”是不可接受的。 我不确定如何将所有这些表与单个查询结合在一起。
答案 0 :(得分:2)
您可以使用outer apply
:
SELECT B.*, H.*, v.discount
FROM Branch_Totals B JOIn
Company H
ON H.CompanyID = B.CompanyID OUTER APPLY
(SELECT TOP (1) v.*
FROM DiscountLine Vv
WHERE H.VDHeaderID = V.HeaderID AND
B.Sales_Total >= V.Min
ORDER BY V.MIN DESC
) v;
我注意到您有min和max列,因此您也可以只使用join
:
SELECT *
FROM Branch_Totals B JOIN
Company H
ON H.CompanyID = B.CompanyID JOIN
DiscountLine V
ON H.VDHeaderID = V.HeaderID AND
B.Sales_Total BETWEEN v.MIN and v.MAX