【发布时间】:2016-04-13 02:49:01
【问题描述】:
我使用的是 SQL Server 2012。
我需要生成一个输出,其中包含多个“top”查询的结果,其中每个查询中返回的“top”行数根据另一个表中的值而变化。
我的第一个表,称为 Table1,是参考表,其中 NUMBER 告诉我对于每个唯一的 MARKET/MEASURE,我需要从另一个表返回多少顶行。
MARKET MEASURE NUMBER
------ ------- ------
MarketA MeasureA 411
MarketA MeasureB 396
MarketB MeasureA 548
MarketB MeasureC 424
MarketC MeasureC 411
第二个表 Table2 列出了给定 MARKET/MEASURE 中每个人的详细信息,其中 MARKET 和 MEASURE 的组合是我的主键。任何给定的 MARKET/MEASURE 都有许多条目。
MARKET MEASURE LASTNAME COMPLIANT
------ ------- -------- ---------
MarketA MeasureA Coppola Y
MarketA MeasureA Winterbottom N
MarketA MeasureB Scorsese Y
MarketC MeasureC Tarr Y
对于 Table1 中的每个值,我需要根据 LASTNAME 的升序从 Table2 返回那么多顶部行。例如,因为 Table1 的 MarketA/MeasureA 的 NUMBER 为 411,我的输出需要包含 Table2 中的 TOP 411 * 行(基于该市场中按 LASTNAME 升序排序的所有人员),以及 MarketA/ 的 TOP 396 行MeasureB,然后是 MarketB/MeasureA 的 TOP 548 行,依此类推,都在一个表中,就好像我已经“联合”(?)每个查询单独。
如何动态地执行此操作,而不必为表 1(其中超过 1000 个)中的每个 MARKET/MEASURE 单独查询?
感觉答案是用select表达式在TOP表达式中生成#,比如.....
select TOP (select NUMBER from TABLE2) *
from TABLE1 t1
inner join TABLE2 t2 on t2.MARKET = T1.MARKET
and t2.MEASURE = T2.MEASURE
...但显然我错过了几个步骤,因为 TOP 表达式将从 TABLE2 中带回多个值,我无法完全弄清楚如何让它为每个 MARKET/MEASURE 组合“运行”。
帮助非常感谢。
【问题讨论】:
标签: sql-server tsql sorting dynamic sql-server-2012