我需要生成一个地址列表,我的客户将发送商品目录.他们想要将特定数量的目录(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