从SQL Server表中检索每个类别的不同行数

前端之家收集整理的这篇文章主要介绍了从SQL Server表中检索每个类别的不同行数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要生成一个地址列表,我的客户将发送商品目录.他们想要将特定数量的目录(X)发送到特定的邮政编码(Y)[这与这些邮政编码中的平均收入有关]

我在sql Server 2008 R2中有2个表:CatalogRequests和AddressList

CatalogRequests是我们应该向客户数据库中的每个邮政编码发送多少目录的列表:

  1. | Zip | QuantityRequested |
  2. -------------------------------
  3. | 12345 | 150 |
  4. | 13445 | 800 |
  5. | 45678 | 200 |
  6. | 41871 | 350 |
  7. | 77777 | 125 |

AddressList就是这样,一个地址列表=)

  1. | Name | Address1 | Address2 | City | State | Zip |
  2. ---------------------------------------------------------------------------
  3. | Bruce | 1 BatCave Dr | | Gotham City | IL | 12345 |
  4. | Clark | 9 Smallville St | Apt A | Metropolis | NY | 45678 |
  5. | Thor | 5 Valhalla Way | | Asgard | ?? | 77777 |

我试着用SQL查询做了一段时间,然后放弃并编写了一个小的C#程序来做我需要做的事情(基本上,生成一堆SQL查询 – 一个用于CatalogRequests中的每个记录) .

我的问题是,我怎么能用一个SQL查询完成这个?我只是好奇这一点,似乎有办法做到这一点,我只是遗漏了一些东西.或者可能不可能,我很疯狂=)

结果集将是来自AddressList的记录,其满足CatalogRequest中的要求(例如,150个邮政编码为12345的记录,800个记录,邮政编码为13445,等等).

解决方法

嗯……这样的事情怎么样:
  1. ;with addressListWithID
  2. AS
  3. (
  4. SELECT name,address1,adress2,city,state,zip,ROW_NUMBER() OVER(partition by zip order by newid()) as Row
  5. FROM AddressList
  6. )
  7. SELECT A.name,A.address1,A.adress2,A.city,A.state,A.zip
  8. FROM addressListWithID A
  9. INNER JOIN CatalogRequests C
  10. ON C.zip = A.zip
  11. AND A.row <= C.QuantityRequested

请求数量随机地址.

猜你在找的MsSQL相关文章