我试图将单个查询分为4部分,以提高可读性。
将其作为单个查询虽然足够,但对于显示目的而言并不是“漂亮”的。
例如,查询会带来类似于以下内容的查询。
SELECT Column1Number
,Column2Text
FROM TableExample
WHERE Column1Number BETWEEN 1 AND 100
第1栏 | Column2Text |
---|---|
001 | Desc1 |
... | ... |
100 | Desc100 |
我希望能够引入的是上述内容,但分为4个(或X个)相等的部分。
第1栏 | Column2Text |
---|---|
001 | Desc1 |
... | ... |
25 | Desc25 |
第1栏 | Column2Text |
---|---|
26 | Desc26 |
... | ... |
50 | Desc50 |
第1栏 | Column2Text |
---|---|
51 | Desc51 |
... | ... |
75 | Desc75 |
第1栏 | 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。NTILE是T-SQL尽可能均匀地划分行的方法。
--==== 1. Sample Data
DECLARE @table TABLE (SomeNbr INT IDENTITY, SomeValue VARCHAR(50));
INSERT @table(SomeValue) SELECT TOP (11) NEWID() FROM sys.all_columns;
--==== Solution
SELECT
TileGroup = NTILE(4) OVER (ORDER BY t.SomeNbr), t.SomeNbr, t.SomeValue
FROM @table AS t;
返回值:
TileGroup SomeNbr SomeValue
----------- -------- ---------------
1 1 C3DB121B-C353-4...
1 2 A6C40211-D53B-4...
1 3 A2089286-1106-4...
2 4 3392E634-1D5E-4...
2 5 9006F0EB-1FDB-4...
2 6 831175BF-2783-4...
3 7 339216A6-AB6C-4...
3 8 29EAEECA-27E9-4...
3 9 CA302532-40F1-4...
4 10 29A41096-A786-4...
4 11 E0CA6CD4-FCB4-4...
请注意,NTILE的性能并不出色。为了获得更好的性能,可以使用NTally表,因为这是均匀划分行的最快方法。性能远远超过NTILE。不过,还需要做更多的工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句