访问SQL - 为每10行创建行并在组中找到剩余

时间:2014-02-14 19:07:32

标签: sql ms-access

我无法概念化如何使用SQL专门执行此操作。

假设我有一个查询可能是解决此问题的子查询产生的:

Color     |  Count
Brown     |  25
Yellow    |  5
Blue      |  35

使用上面的结果集,我想要一个包含以下内容的查询:

Color
Brown
Brown
Brown
Yellow
Blue
Blue
Blue
Blue

另一种解决方案是采取计数并执行以下操作:

SELECT -Int((-Count(*)/10)) AS Expr1, Color
FROM ColorTable
group by test.Source_City

其中,使用上述数据会产生:

Color     |  Count
Brown     |  3
Yellow    |  1
Blue      |  4

对此的解决方案是获取Count并为每个1写一行。

1 个答案:

答案 0 :(得分:2)

因此,我们将测试数据放在名为[InitialCounts]

的表中
Color   Count
------  -----
Blue       35
Brown      25
Yellow      5

和名为[Numbers]的“数字表”包含

   n
----
   1
   2
   3
...
9999

(或根据我们希望为每种颜色推导出的最大行数,根据需要进行调整)。

查询

SELECT 
    Color, 
    Int(CDbl(Count)/10 + 0.5) AS NewCount
FROM InitialCounts

返回

Color   NewCount
------  --------
Blue           4
Brown          3
Yellow         1

如果我们想为每种颜色生成重复的行,我们可以做到

SELECT NewCounts.Color
FROM
    Numbers,
    (
        SELECT 
            Color, 
            Int(CDbl(Count)/10 + 0.5) AS NewCount
        FROM InitialCounts
    ) AS NewCounts
WHERE Numbers.n <= NewCounts.NewCount
ORDER BY NewCounts.Color

返回

Color 
------
Blue  
Blue  
Blue  
Blue  
Brown 
Brown 
Brown 
Yellow