我需要生成一个地址列表,我的客户将发送商品目录.他们希望将特定数量的目录(X)发送到特定的邮政编码(Y)[这与这些邮政编码中的平均收入有关]
我在SQL Server 2008 R2中有2个表:CatalogRequests和AddressList
CatalogRequests 是我们应该向客户数据库中的每个邮政编码发送多少目录的列表:
| Zip | QuantityRequested |
-------------------------------
| 12345 | 150 |
| 13445 | 800 |
| 45678 | 200 |
| 41871 | 350 |
| 77777 | 125 |
Run Code Online (Sandbox Code Playgroud)
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 |
Run Code Online (Sandbox Code Playgroud)
我试着用SQL查询做了一段时间我的大脑,然后放弃并写了一个小的C#程序来做我需要做的事情(基本上,生成一堆SQL查询 - 每个记录一个CatalogRequests).
我的问题是,我怎么能用一个SQL查询完成这个?我只是好奇这一点,似乎有办法做到这一点,我只是遗漏了一些东西.或者可能不可能,我很疯狂=)
结果集将是AddressList满足要求的记录CatalogRequest(例如,150个邮政编码为12345的记录,800个记录,邮政编码为13445等).
Cod*_*ian 11
嗯......这样的事情怎么样:
;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
Run Code Online (Sandbox Code Playgroud)
请求数量的随机地址.
未经测试,因为没有DDL且没有测试数据:
SELECT A.name ,
A.address1 ,
A.adress2 ,
A.city ,
A.[state] ,
A.zip
FROM CatalogRequests AS C
CROSS APPLY ( SELECT TOP ( C.QuantityRequested )
A.name ,
A.address1 ,
A.adress2 ,
A.city ,
A.[state] ,
A.zip
FROM addressListWithID AS A
WHERE C.zip = A.zip
) AS A
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1034 次 |
| 最近记录: |