查询按英国邮政编码计算订单数量

时间:2013-01-22 10:01:55

标签: sql sql-server tsql select count

我有一张由客户下达的订单表,我想要的是检查国家订单的哪一部分在历史上来了,我只能通过邮政编码来检查,以获得包含邮政编码SK的订单...意思是它的stockport,类似于从M开始的邮政编码意味着订单来自曼彻斯特,是否可以编写一个可以通过邮政编码计算订单的查询。

Order表的一些字段: OrderNumber OGUID custID名字姓氏地址邮政编码电子邮件授权日期等...

任何建议或协助将不胜感激。 感谢

4 个答案:

答案 0 :(得分:1)

如果您有一个包含城市代码和城市名称的表格,那么您可以使用以下内容将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

<击>

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

select count(1) over(partition by postcode) as countByPostcode, othecolumnhere
from Order

答案 3 :(得分:0)

你尝试过这样的事吗?我认为,邮政编码的城镇部分将是前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进入吉尔福德等......