私が正しく質問を理解している場合、あなたは基本的にサイズがあなたの範囲を分割CTEを作成できる大きさ未満6000
6000より大きいと同様である範囲の数のカウントを決定したいです文字列を最小値と最大値に変換します。次は
最後のステップはIsLessThan6000とIsGreaterThan6000列を合計する範囲の大きさが大きいか小さいより6000実際には、単純に0または1(IsLessThan6000とIsGreaterThan6000列)を返しているかどうかを判断するためにcase文を使用します。次の例では、方法を示しています。
DECLARE @TerribleRangeTable TABLE
(
[ID] INT IDENTITY PRIMARY KEY
,[Range] NVARCHAR(100)
)
INSERT INTO @TerribleRangeTable
(
[Range]
)
VALUES
('1000000+'),
('2000000+'),
('100001-250000'),
('10001-11000'),
('10001-12500'),
('1001-2000'),
('1001-2500'),
('11001-12000'),
('12001-13000'),
('12501-15000'),
('13001-14000'),
('14001-15000'),
('15001-16000'),
('15001-20000'),
('15001-25000')
DECLARE @maxUnbound INT = 1073741824;
WITH CTE_RangeMinMax
AS
(
SELECT [ID]
,[Range]
,( -- CASE statement
CASE
WHEN CHARINDEX('-', [Range]) = 0 THEN CAST(REPLACE([Range], '+', '') AS FLOAT) -- If no ‘-‘ character is available then assume this is an unbound range on maximum. Simply replace ‘+’ character with an empty string and convert to float.
WHEN CHARINDEX('-', [Range]) > 0 THEN LEFT([Range], CHARINDEX('-', [Range]) - 1) -- Get the text left of ‘-‘character to get range minimum and convert to float.
ELSE NULL
END
) RangeMin
,(
CASE
WHEN CHARINDEX('-', [Range]) = 0 THEN @maxUnbound -- If no ‘-‘ character is available then assume this is an unbound range on maximum. Set value to a large integer.
WHEN CHARINDEX('-', [Range]) > 0 THEN RIGHT([Range], LEN([Range]) - CHARINDEX('-', [Range])) -- -- Get the text right of ‘-‘character to get range maximum and convert to float.
ELSE NULL
END
) RangeMax
FROM @TerribleRangeTable
), CTE_RangeGreaterOrLessThan
AS
(
SELECT [ID]
,[Range]
,RangeMin
,RangeMax
,(
CASE
WHEN (RangeMax - RangeMin) <= 6000 THEN 1
ELSE 0
END
) AS IsLessThan6000
,(
CASE
WHEN (RangeMax - RangeMin) > 6000 THEN 1
ELSE 0
END
) AS IsGreaterThan6000
FROM CTE_RangeMinMax
)
SELECT SUM(IsLessThan6000) AS Lesser_RangeCount
,SUM(IsGreaterThan6000) AS Greater_RangeCount
FROM CTE_RangeGreaterOrLessThan
を比較し、この 'Data'-テーブルには、2つの列がありん:' MinValue'をint型と 'MaxValue'をint型?今なら、なぜ? –
してくださいそれが可能なすべての列とサンプルデータが誰であるか、あなたのデータ構造、および予想される出力 – scsimon
ティムが言うようにはい、これはあなたの問題はあなたが別の2をぎゅうぎゅう詰めているように見えることに起因する、データ型フロート – Amelia