【发布时间】:2014-12-06 17:20:27
【问题描述】:
我的数据库中有两个表。一个表包含带有邮政编码位置的货运数据,另一个表包含美国所有邮政编码的完整邮政编码列表。为了简单起见,我只是在下面包含了相关的列。
表格:邮政编码
- 邮政编码 PK char(5)
表格:出货量
- ShipToZip varchar(10)
- AMT 十进制 (10,2)
因此,有些货件数据可能发往非美国地址,而其他货件数据可能包括美国邮政编码 (XXXXX-XXXX) 的 +4,这就是货件表最多有 10 个的原因。我需要做的就是将查询导出为 CSV,但是我需要将邮政编码转换为整数。
SELECT CAST(ShipToZIP AS INT) AS [target],SUM(cast(AMT as int)) AS [total]
FROM
(SELECT LEFT(ShiptoZip,5) ShipToZip,Amt
FROM Shipments
WHERE LEFT(SHIPTOZIP,5) IN (SELECT zipcode from ZipCodeLocations)
) Q
GROUP BY CAST(ShipToZIP AS INT)
但是,当我运行该查询时,我不断收到加拿大邮政编码的转换错误。如果我自己运行内部 Q 查询,则每条记录都是仅适用于美国的有效代码。
如何强制子查询先运行?我尝试将其设为 this post 的 CTE,但它也不起作用。
【问题讨论】:
-
将邮政编码视为整数不仅对加拿大的邮政编码,而且对具有前导 0 的美国邮政编码也是一个问题。您需要认真研究该要求,因为它非常有问题。例如。将前导零邮政编码从 int 转换为 5 char 字符串的所有情况... 为什么将邮政编码视为 int?你不能用它做数学。
-
嗯,我需要它处理文件和 Excel 之间的一些数据,烦人的是,无论我保存为 CSV 时做什么,总是删除前导 0。所以我试图通过将其输出为整数来节省额外的步骤。
标签: sql-server