Chr*_*rie 3 sql t-sql sql-server casting
我想写一些SQL来实现以下目标.
"向我展示每日结果,详细说明报价数量及其相关票价的总和,其中票价不为空,QuoteOrBooking等于'报价'".
所以,鉴于下表,我正在寻找以下结果:
Date Quotes TotalValue
2013-08-06 3 228.00
2013-08-07 2 80.00
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,Fare是一个(相当混乱的)字符串字段,所以我需要清理它并转换为小数.这是我坚持的一点.下面的例子显示了问题的严重程度(例如,如果我能让它为这些数据工作,它将适用于整个数据库).
我想我搞乱了REPLACE的使用,我不确定在尝试将字符串转换为小数时是否存在句点(.)是否可接受.
+-------------+------------+----------------+
| BookingDate | Fare | QuoteOrBooking |
+-------------+------------+----------------+
| 2013-08-06 | NULL | Quote |
| 2013-08-06 | 21 | Booking |
| 2013-08-06 | 97 | Quote |
| 2013-08-06 | £131 | Quote |
| 2013-08-07 | 21.00 | Quote |
| 2013-08-07 | 59. | Quote |
| 2013-08-07 | NULL | Quote |
| 2013-08-07 | 97 | Booking |
+-------------+------------+----------------+
Run Code Online (Sandbox Code Playgroud)
非常感激任何的帮助.
非常感谢,
克里斯.
看起来MONEY
对我来说都是:
SELECT CAST(Fare AS MONEY)
FROM Table1
Run Code Online (Sandbox Code Playgroud)
演示:SQL小提琴
完整查询:
SELECT BookingDate
,COUNT(*)
,SUM(CAST(Fare AS MONEY))
FROM Table1
WHERE QuoteOrBooking = 'Quote'
AND Fare IS NOT NULL
GROUP BY BookingDate
ORDER BY BookingDate
Run Code Online (Sandbox Code Playgroud)
要么:
SELECT BookingDate
,COUNT(Fare)
,SUM(CAST(Fare AS MONEY))
FROM Table1
WHERE QuoteOrBooking = 'Quote'
GROUP BY BookingDate
ORDER BY BookingDate
Run Code Online (Sandbox Code Playgroud)