我需要生成一个地址列表,我的客户将发送商品目录.他们想要将特定数量的目录(X)发送到特定的邮政编码(Y)[这与这些邮政编码中的平均收入有关]
我在sql Server 2008 R2中有2个表:CatalogRequests和AddressList
CatalogRequests是我们应该向客户数据库中的每个邮政编码发送多少目录的列表:
- | Zip | QuantityRequested |
- -------------------------------
- | 12345 | 150 |
- | 13445 | 800 |
- | 45678 | 200 |
- | 41871 | 350 |
- | 77777 | 125 |
AddressList就是这样,一个地址列表=)
- | Name | Address1 | Address2 | City | State | Zip |
- ---------------------------------------------------------------------------
- | Bruce | 1 BatCave Dr | | Gotham City | IL | 12345 |
- | Clark | 9 Smallville St | Apt A | Metropolis | NY | 45678 |
- | Thor | 5 Valhalla Way | | Asgard | ?? | 77777 |
我试着用SQL查询做了一段时间,然后放弃并编写了一个小的C#程序来做我需要做的事情(基本上,生成一堆SQL查询 – 一个用于CatalogRequests中的每个记录) .
我的问题是,我怎么能用一个SQL查询完成这个?我只是好奇这一点,似乎有办法做到这一点,我只是遗漏了一些东西.或者可能不可能,我很疯狂=)
结果集将是来自AddressList的记录,其满足CatalogRequest中的要求(例如,150个邮政编码为12345的记录,800个记录,邮政编码为13445,等等).
解决方法
嗯……这样的事情怎么样:
- ;with addressListWithID
- AS
- (
- SELECT name,address1,adress2,city,state,zip,ROW_NUMBER() OVER(partition by zip order by newid()) as Row
- FROM AddressList
- )
- SELECT A.name,A.address1,A.adress2,A.city,A.state,A.zip
- FROM addressListWithID A
- INNER JOIN CatalogRequests C
- ON C.zip = A.zip
- AND A.row <= C.QuantityRequested