1
我需要一些基本的TSQL帮助。这里是我的表布局:SQL查询 - 需要一些基本的帮助
订单表
- SSN
- 邮编
ZipLookup表
- 邮编
- 州
所有列都是varchars。
我将如何得到每个州有不同SSN数量的州名单?优选地,如果特定SSN具有来自多个状态的订单,则只有具有最多订单的状态才会被计入该SSN。
谢谢你给我的任何提示。
我需要一些基本的TSQL帮助。这里是我的表布局:SQL查询 - 需要一些基本的帮助
订单表
ZipLookup表
所有列都是varchars。
我将如何得到每个州有不同SSN数量的州名单?优选地,如果特定SSN具有来自多个状态的订单,则只有具有最多订单的状态才会被计入该SSN。
谢谢你给我的任何提示。
首先,你最好确保你被允许存储SSN,因为有一大堆隐私法律和法规可能会禁止它。
查询应该是这样的:
SELECT z.State, COUNT(DISTINCT o.SSN) AS SsnCount
FROM ZipLookup z
INNER JOIN Orders o
ON o.ZipCode = z.ZipCode
GROUP BY z.State
如果你只需要算SSN在其-最频繁使用状态:
WITH StateSSNs AS
(
SELECT
o.SSN, z.State,
ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) AS RowNum
FROM Orders o
INNER JOIN ZipLookup z
ON z.ZipCode = o.ZipCode
GROUP BY o.SSN, z.State
)
SELECT z.State, COUNT(*) AS SsnCount
FROM ZipLookup z
INNER JOIN StateSSNs s
ON s.State = z.State
WHERE s.RowNum = 1
GROUP BY z.State
性能不会很好,我认为这将需要至少一次全面扫描,也许需要两次,但如果你想要更好的东西,那么你需要规范化模式。
感谢您的快速回复。实际上,我将实际的专栏名称更改为SSN,因此它会更短。 :) 是否有可能写一个查询,如果一个特定的SSN有来自多个州的订单,那么只有该订单数最多的州才会被计入该SSN?就像一个特定的SSN有来自NY的5个订单和来自KY的2个订单,只计算来自NY的那个。 我通常只做简单的查询,然后转而使用C#来处理任何我无法写入的内容,但是这似乎可以在SQL中完成。 再次感谢您的帮助。 – 2010-04-03 01:05:28
绝对不可思议。非常感谢,这对我非常有帮助。 – 2010-04-03 02:08:32