【发布时间】:2021-01-23 04:03:43
【问题描述】:
为了便于阅读,我正在尝试将单个查询拆分为 4 个部分。
将其作为单个查询虽然足够,但对于显示目的来说并不“漂亮”。
一个例子是一个类似于下面的查询。
SELECT Column1Number
,Column2Text
FROM TableExample
WHERE Column1Number BETWEEN 1 AND 100
| Column1Number | Column2Text |
|---|---|
| 001 | Desc1 |
| ... | ... |
| 100 | Desc100 |
我希望它能够带来的是上述内容,但分成 4(或 X)等份。
| Column1Number | Column2Text |
|---|---|
| 001 | Desc1 |
| ... | ... |
| 25 | Desc25 |
| Column1Number | Column2Text |
|---|---|
| 26 | Desc26 |
| ... | ... |
| 50 | Desc50 |
| Column1Number | Column2Text |
|---|---|
| 51 | Desc51 |
| ... | ... |
| 75 | Desc75 |
| Column1Number | Column2Text |
|---|---|
| 76 | Desc76 |
| ... | ... |
| 100 | Desc100 |
然后可以将上述 4 个表格水平并排显示。
WHERE 子句上会有“其他”过滤器,但它会生成一个数字列表及其对应的文本。以产品编号和产品描述为例。
我认为我需要一种将MAX(Column1Number) 除以 4 并将结果放入变量的方法。也许是这样的。
DECLARE @MinNumber VARCHAR(100) = MIN(Column1Number)
DECLARE @MaxNumber VARCHAR(100) = MAX(Column1Number)
DECLARE @QuarterMaxNumber VARCHAR(100) = @MaxNumber/4
从那里,我应该能够对变量进行“四分之一”处理
DECLARE @FirstQuarter VARCHAR(100) = @MinNumber + @QuarterMaxNumber
DECLARE @ThirdQuarter VARCHAR(100) = @MaxNumber - @QuarterMaxNumber
DECLARE @MidWayPoint VARCHAR(100) = @MaxNumber/2
最后对4条SQL查询做一些比较简单的调整。
SELECT Column1Number
,Column2Text
FROM TableExample
WHERE Column1Number >= @MinNumber AND Column1Number < @FirstQuarter
SELECT Column1Number
,Column2Text
FROM TableExample
WHERE Column1Number >= @FirstQuarter AND Column1Number < @MidWayPoint
SELECT Column1Number
,Column2Text
FROM TableExample
WHERE Column1Number >= @MidWayPoint AND Column1Number < @ThirdQuarter
SELECT Column1Number
,Column2Text
FROM TableExample
WHERE Column1Number >= @ThirdQuarter AND Column1Number <= @MaxNumber
我认为以上内容适用于连续数字。即从 1 到 100 的连续计数,但如果缺少某些数字,或者列表不是从 1 开始,则会中断。中断是指 4 个查询的长度不相等。
我将能够在 4 个单独的查询中拥有相同的变量集,并且自定义设置 WHERE 子句也不是问题。它可能效率不高,但目前这不是什么大问题。
最后。我希望这有一些技巧。
感谢所有帮助。
【问题讨论】:
-
也许 ntile 可能适用于此。
-
这应该在你的前端处理。但是如果你决定用 SQL 来做,看看
offset。 -
我认为这将处理不均匀大小的桶。抱歉没有第一次阅读。 stackoverflow.com/questions/52831510/…
-
row_Number 可用于生成您自己的 Id 字段,因此您不必像上面提到的那样处理空白