Q1:
答:电信SQL Server数据库中有两个表 - 客户和费率如下所示:
客户
PK CustomerPhoneNumber varchar(15) CustomerType int -the type of customer
价格
FK CustomerType int - the type of customer CountryCode varchar(4) – the country calling code Rate float - the rate per minute of phone call
示例国家/地区代码:
1 – USA 1809 – Dominican Republic 44 – Great Britain 359 – Bulgaria
所以美国的电话号码是13104405609。
如表中所示,费率取决于客户类型和所呼叫的国家/地区。
考虑到呼叫的完整始发和目的地电话号码(包括国家/地区代码)及其持续时间(以分钟为单位),请编写单个SQL语句来计算呼叫费用。
为方便起见,让SQL语句的参数称为@FromPhoneNumber,@ ToPhoneNumber,@ Duration。
答案 0 :(得分:0)
如果总费率是原始国家的费率+目的地国家的费率
(顺便说一下,从商业模式的角度来看,没有任何意义,因为任何一家公司都不会控制或应用许多离散费率)
但如果是,则SQL将是:
Select @Duration *
((Select fR.Rate
From Customers fC Join Rates fR
On fR.CustomerType = fC.CustomerType
Where fC.CustomerPhoneNumber = @FromPhoneNumber)
+
(Select tR.Rate
From Customers tC Join Rates tR
On tR.CustomerType = tC.CustomerType
Where tC.CustomerPhoneNumber = @ToPhoneNumber))
答案 1 :(得分:0)
SELECT CostofCall = @Duration * Sum(Rate)
FROM
Customers C
INNER JOIN Rates R ON C.CustomerType = R.CustomerType
WHERE
C.CustomerPhoneNumber IN (@FromPhoneNumber, @ToPhoneNumber)
答案 2 :(得分:0)
这是我的看法:
SELECT r.rate * @Duration
FROM CUSTOMERS c
JOIN RATES r ON r.customertype = c.customertype
AND (LEFT(r.countrycode, 1) = LEFT(@ToPhoneNumber, 1)
OR LEFT(r.countrycode, 2) = LEFT(@ToPhoneNumber, 2)
OR LEFT(r.countrycode, 3) = LEFT(@ToPhoneNumber, 3)
OR LEFT(r.countrycode, 4) = LEFT(@ToPhoneNumber, 4))
WHERE c.customerphonenumber = @FromPhoneNumber
我让@FromPhoneNumber
成为了如何找到特定客户的方法。要了解该客户的收费率,您需要根据以下因素与客户建立相关费率:
customertype
countrycode
因为countrycode
的数据类型是VARCHAR(4),并且没有定义参数的任何数据类型 - 所以做出了假设。代码并不完全安全,但我们的想法是只返回一个速率,因为代码应该是唯一的。
有人可以向我解释为什么其他答案结合了费率?您何时通过电话向两个方向收费?