【问题标题】:Query for Counting number of orders by UK postcode查询英国邮政编码的订单数量
【发布时间】:2013-01-05 12:35:04
【问题描述】:

我有一张客户下的订单表,我想要检查历史上来自哪个国家/地区的订单,我只能通过邮政编码检查,例如邮政编码为 SK 的订单...表示它的 stockport ,同样从 M 开始的邮政编码 .. 表示订单来自曼彻斯特,是否可以编写一个可以按邮政编码计算订单的查询。

Order 表的一些字段: OrderNumber OGUID custID firstname last name address postcode email 授权日期等...

我们将不胜感激任何建议或帮助。 谢谢

【问题讨论】:

  • 您可能需要在邮政编码和地名之间找到某种映射 - 没有可怕的字符串解析我想您需要尝试在网络上找到已经这样做的第三方并将为您提供一个部分匹配的 SQL 表。我不希望这将是免费的!例如,这是我找到的一个,但价格为 24 英镑:sqldumpster.com/databases/geographic/…

标签: sql sql-server tsql select count


【解决方案1】:
select count(1) over(partition by postcode) as countByPostcode, othecolumnhere
from Order

【讨论】:

  • 你指的是其他栏目
  • 我的意思是您可以根据需要添加任何其他列,例如“OrderNumber OGUID custID firstname last name address”
【解决方案2】:

如果您有一个包含城市代码和城市名称的表,那么您可以使用类似下面的内容,将您的 orders 表连接到使用 LIKE 的代码:

select o.postcode,
  c.city,
  count(c.code) over(partition by c.code) Total
from orders o
inner join codes c
  on o.postcode like '%'+c.code+'%'

SQL Fiddle with Demo

您可以使用GROUP BY获取每个postcode中的订单总数:

select postcode, count(postcode) TotalOrdersByPostCode
from orders
group by postcode

如果你想包含City,那么你也可以GROUP BY city:

select city, postcode, count(postcode) TotalOrdersByPostCode
from orders
group by  city, postcode

【讨论】:

  • 所有邮政编码都不同于城市代码,我想按邮政编码计算订单,但它应该按城市分组
  • @MrA 你也可以按城市添加分组
  • 我认为您误解了我的问题,例如,如果我从 M8 5CA、SK 1SED、M9 6AU 获得 3 个订单,则查询应返回:曼彻斯特 2 个订单,斯托克波特 1 个订单,如 M邮政编码代表曼彻斯特,邮政编码中的 SK 代表斯托克波特
  • @MrA 您是否有某种表格可以识别每个城市和城市/邮政编码?如果不是,那么您将如何确定一个邮政编码是以一个字母还是两个字母开头?
  • 是的,我得到了所有英国城市及其代码的列表,但它非常庞大
【解决方案3】:

这是一种可行的方法......但对于一个庞大的列表来说它可能会变得太长。我会尝试找到解决这个问题的方法。

SELECT
  CASE
    WHEN postcode LIKE 'SK%'   THEN 'SK'
    WHEN postcode LIKE 'M%' THEN 'M'
  END AS group_by_value
, COUNT(*) AS group_by_count
FROM [Table] a
GROUP BY 
  CASE
    WHEN postcode LIKE 'SK%'   THEN 'SK'
    WHEN postcode LIKE 'M%' THEN 'M'
  END

【讨论】:

    【解决方案4】:

    你尝试过这样的事情吗?我认为邮政编码的城镇部分将是前 1 或 2 个字节,后面用数字分隔。所以这会给你前几个字母。

    select substring(postcode,1, patindex('%[0-9]%',postcode)-1), count(*)
    from Order
    group by substring(postcode,1, patindex('%[0-9]%',postcode)-1)
    

    然后您必须将 M 解码为曼彻斯特,将 W 解码为西伦敦,将 GU 解码为吉尔福德等......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      相关资源
      最近更新 更多