Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Sql:在一行而不是不同的列中显示数据_Mysql_Sql - Fatal编程技术网

Mysql Sql:在一行而不是不同的列中显示数据

Mysql Sql:在一行而不是不同的列中显示数据,mysql,sql,Mysql,Sql,我编写了一个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;

我编写了一个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;
输出

品种组列中,我得到了不同行中相同ryot_代码的不同品种代码

我的问题是,我如何编写一个查询,使用它我可以在一行中获得同一种植者的所有类型或**品种\代码**,如下图所示


我将原始问题中的查询包装在一个外部查询中,该查询在
variation\u组
列上执行一个轴心:

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
而不是结果 如果您将其设计为品种组的单列,并使用逗号分隔的值,如10、30表示ryot_代码00010004,则更可取

如果您喜欢这个建议,那么可以使用下面的查询来完成

`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;`

希望它能像预期的那样工作

您可以在SQL中使用
PIVOT
实现这一点

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;

为什么0001000006、0001000009等没有输出?@jarlh我想他只是没有包括所有内容。所以这只是一个关键问题。我认为如果
variation\u group
值从10、20、30、40、50增加,就会出现问题。。。。等等,我同意。这个答案假设他有一个固定数量的小品种群。让我们等待问题的所有者也发表评论。在**GROUP BY ryot_code、ryot_name、variety_GROUP**之后必须删除分号,我猜它不允许执行sql的其余部分(我使用的是mysql)。感谢您指出这一点。因为你的查询太复杂了,我没有时间为它创建一个提琴。是的,我的品种组数量有限。还有另一个解决方法