按参数将数据放入范围
Put Data into Ranges by Parameter
我有这样的数据:
FIELD_ID | Acreage | Association
017-8596 | 1.2589 | ABC
017-8521 | 25.89 | CDA
我想首先获取 Acreage
s:
范围内的字段数
1-10
11-25
26-50
51-100
100-500
然后得到相同的范围但是Association
。
结果应该是这样的:
Acreage Range | Number of Fields
1-10 | 200
11-25 | 670
25-50 | 12
等等
第一个结果应该包含对所有 Association
的查询,然后另一个应该是个人 Association
.
的结果
select qq.range_id,
count(distinct of qq.field_id or qq.assocuation)
from
(
select <all of your fields>,
case
when .... '1-10'
when .... '11-20'
end range_id
from ...
) qq
group by qq.range_id
您可以使用 UNION
ed 子查询来声明一系列范围,然后 JOIN
table 使用它,使用聚合计算出现的次数:
SELECT
CONCAT(r.lbound, '-', r.ubound) Acreage_Range,
COUNT(*) Number_of_Fields
FROM
mytable t
INNER JOIN (
SELECT 1 lbound, 10 ubound
UNION ALL SELECT 11, 25
UNION ALL SELECT 26, 50
UNION ALL SELECT 51, 100
UNION ALL SELECT 101, 500
) ranges r
ON t.acreage >= r.lbound AND t.acreage <= r.ubound
GROUP BY r.lbound, r.ubound
如果您需要过滤给定 Association
的结果,则只需在查询中添加 WHERE
子句即可。
我尝试了这个并得到了结果,但想知道如果我的 none 行无效并且所有行都有数据,为什么我得到无效的面积。知道什么会触发这个吗?
WITH AcreageData as
(
SELECT [FIELD_ID],
[ASSN],
[ACREAGE] AS ACREAGE
FROM dbo.CaneParcel
),
GroupAcreage AS
(
SELECT [FIELD_ID],
CASE
WHEN ACREAGE <= 0.50 THEN '< 0.5 Acre'
WHEN ACREAGE >= 0.50 AND ACREAGE <= 1.01 THEN '0.5 - 1 Acre'
WHEN ACREAGE >= 1.01 AND ACREAGE <= 10.01 THEN '1 - 10 Acres'
WHEN ACREAGE >= 10.01 AND ACREAGE <= 25.01 THEN '10 - 25 Acres'
WHEN ACREAGE >= 25.01 AND ACREAGE <= 50.01 THEN '25 - 50 Acres'
WHEN ACREAGE BETWEEN 51.01 AND 100 THEN '51 - 100 Acres'
WHEN ACREAGE BETWEEN 101 AND 200 THEN '101 - 200 Acres'
WHEN ACREAGE BETWEEN 201 AND 300 THEN '201 - 300 Acres'
WHEN ACREAGE > 1000 THEN '1000 and Over'
ELSE 'Invalid Acreage'
END AS [Acreage Groups]
FROM AcreageData
)
SELECT
[Acreage Groups],
COUNT([FIELD_ID]) as NumberofParcels
FROM GroupAcreage
GROUP BY [Acreage Groups]
ORDER BY [Acreage Groups] ASC;
我有这样的数据:
FIELD_ID | Acreage | Association
017-8596 | 1.2589 | ABC
017-8521 | 25.89 | CDA
我想首先获取 Acreage
s:
1-10
11-25
26-50
51-100
100-500
然后得到相同的范围但是Association
。
结果应该是这样的:
Acreage Range | Number of Fields
1-10 | 200
11-25 | 670
25-50 | 12
等等
第一个结果应该包含对所有 Association
的查询,然后另一个应该是个人 Association
.
select qq.range_id,
count(distinct of qq.field_id or qq.assocuation)
from
(
select <all of your fields>,
case
when .... '1-10'
when .... '11-20'
end range_id
from ...
) qq
group by qq.range_id
您可以使用 UNION
ed 子查询来声明一系列范围,然后 JOIN
table 使用它,使用聚合计算出现的次数:
SELECT
CONCAT(r.lbound, '-', r.ubound) Acreage_Range,
COUNT(*) Number_of_Fields
FROM
mytable t
INNER JOIN (
SELECT 1 lbound, 10 ubound
UNION ALL SELECT 11, 25
UNION ALL SELECT 26, 50
UNION ALL SELECT 51, 100
UNION ALL SELECT 101, 500
) ranges r
ON t.acreage >= r.lbound AND t.acreage <= r.ubound
GROUP BY r.lbound, r.ubound
如果您需要过滤给定 Association
的结果,则只需在查询中添加 WHERE
子句即可。
我尝试了这个并得到了结果,但想知道如果我的 none 行无效并且所有行都有数据,为什么我得到无效的面积。知道什么会触发这个吗?
WITH AcreageData as
(
SELECT [FIELD_ID],
[ASSN],
[ACREAGE] AS ACREAGE
FROM dbo.CaneParcel
),
GroupAcreage AS
(
SELECT [FIELD_ID],
CASE
WHEN ACREAGE <= 0.50 THEN '< 0.5 Acre'
WHEN ACREAGE >= 0.50 AND ACREAGE <= 1.01 THEN '0.5 - 1 Acre'
WHEN ACREAGE >= 1.01 AND ACREAGE <= 10.01 THEN '1 - 10 Acres'
WHEN ACREAGE >= 10.01 AND ACREAGE <= 25.01 THEN '10 - 25 Acres'
WHEN ACREAGE >= 25.01 AND ACREAGE <= 50.01 THEN '25 - 50 Acres'
WHEN ACREAGE BETWEEN 51.01 AND 100 THEN '51 - 100 Acres'
WHEN ACREAGE BETWEEN 101 AND 200 THEN '101 - 200 Acres'
WHEN ACREAGE BETWEEN 201 AND 300 THEN '201 - 300 Acres'
WHEN ACREAGE > 1000 THEN '1000 and Over'
ELSE 'Invalid Acreage'
END AS [Acreage Groups]
FROM AcreageData
)
SELECT
[Acreage Groups],
COUNT([FIELD_ID]) as NumberofParcels
FROM GroupAcreage
GROUP BY [Acreage Groups]
ORDER BY [Acreage Groups] ASC;