Ste*_*sen 2 sql sql-server sql-server-2014
我有一张3柱和4排的桌子.
Col1 Col2 Col3
Row1 A1 B1 1
Row2 A2 B2 0
Row3 A3 B3 3
Row4 A4 B4 1
Run Code Online (Sandbox Code Playgroud)
一个select * from [table]回报:
A1 B1 1
A2 B2 0
A3 B3 3
A4 B4 1
Run Code Online (Sandbox Code Playgroud)
我想要一个选择:
A1 B1 1
A3 B3 3
A3 B3 3
A3 B3 3
A4 B4 1
Run Code Online (Sandbox Code Playgroud)
Col3给出行返回的数量.
从数字表开始......每个数字都有一行的表格,最高可达到您的最大值Col3.它看起来像这样:
表:数字
Value ----- 1 2 3 4 5 ...
然后你可以JOIN使用不等式来到这个表:
SELECT Col1, Col2, Col3
FROM [table] t
INNER JOIN NUMBERS n ON n.Value <= t.Col3
Run Code Online (Sandbox Code Playgroud)
这将使您的Row3值与Numbers表匹配3次,在结果中复制该行,而Row2值将不匹配Numbers表中的任何记录,将其从结果中删除.
Numbers您可以在此处查看生成表格的几个选项:
使用该问题的选项6:
WITH Numbers AS (
SELECT TOP 10000 row_number() over(order by t1.number) as [Value]
FROM master..spt_values t1
CROSS JOIN master..spt_values t2
)
SELECT Col1, Col2, Col3
FROM [table] t
INNER JOIN NUMBERS n ON n.Value <= t.Col3
Run Code Online (Sandbox Code Playgroud)
请注意,这对于您的示例数据来说太过分了3.对于任何小于50的东西,你可以只对表格进行硬编码.我假设你的真实数据要高得多.
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |