我编写了一个sql查询,如下所示
SELECT ryot_code, ryot_name, variety_group, SUM(total_area)
FROM field_survey_trn
WHERE unit_code = '01'
AND season_cntrl = 20
AND crop_type_code NOT IN (11,12)
AND ryot_code != 0
GROUP BY ryot_code, ryot_name, variety_group;
输出
在variety_group列中,我得到了不同行中相同ryot_code的不同种类代码。
我的问题是,我如何编写一个查询,使用该查询,我可以获得同一个种植者的所有类型或** variety_code**,如下图所示
发布于 2015-11-03 08:06:10
我将原始问题中的查询包装在一个外部查询中,该查询对variety_group
列执行枢轴操作:
SELECT t.ryot_code, t.ryot_name,
SUM(CASE WHEN t.variety_group = 10 THEN t.theSum ELSE 0 END) AS '10',
SUM(CASE WHEN t.variety_group = 20 THEN t.theSum ELSE 0 END) AS '20',
SUM(CASE WHEN t.variety_group = 30 THEN t.theSum ELSE 0 END) AS '30'
FROM
(
SELECT ryot_code, ryot_name, variety_group, SUM(total_area) AS theSum
FROM field_survey_trn
WHERE unit_code = '01' AND season_cntrl = 20
AND crop_type_code NOT IN (11,12) AND ryot_code != 0
GROUP BY ryot_code, ryot_name, variety_group
) t
GROUP BY t.ryot_code, t.ryot_name
发布于 2015-11-03 10:40:11
您可以使用PIVOT
在SQL中执行此操作。
SELECT * FROM
(
SELECT ryot_code, ryot_name, variety_group, total_area
FROM field_survey_trn
WHERE unit_code = '01'
AND season_cntrl = 20
AND crop_type_code NOT IN (11,12)
AND ryot_code != 0
) as my_name
PIVOT
(
SUM(total_area)
FOR [variety_group] IN ([10], [20], [30])
) piv1;
发布于 2015-11-03 08:10:15
如果您将其设计为品种组的单列,并为ryot_code 00010004设置逗号分隔值(如10,30 ),则结果将是首选的。
如果您喜欢这个建议,那么可以使用下面的查询来完成
`SELECT group_concat(variety_group separator ',') INTO var_grp,
ryot_code, ryot_name, SUM(total_area)
FROM field_survey_trn
WHERE unit_code = '01'
AND season_cntrl = 20
AND crop_type_code NOT IN (11,12)
AND ryot_code != 0;`
希望这能像预期的那样起作用
https://stackoverflow.com/questions/33493985
复制相似问题