首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以不同方式显示查询结果

以不同方式显示查询结果
EN

Stack Overflow用户
提问于 2017-03-30 00:04:27
回答 2查看 37关注 0票数 0

我有一个疑问:

代码语言:javascript
复制
SELECT pr_products.product AS PRODUCT, pr_varieties.variety AS VARIETY, pr_grades.GRADE, SUM(pf_harvest.quantity) AS QUANTITY
FROM pf_harvest
INNER JOIN pf_performance ON pf_performance.id = pf_harvest.id_performance
INNER JOIN pr_products ON pr_products.id = pf_harvest.id_product
INNER JOIN pr_varieties ON pr_varieties.id = pf_harvest.id_variety
INNER JOIN pr_grades ON pr_grades.id = pf_harvest.id_grade
WHERE pf_performance.status = 100
AND pf_harvest.id_tenant = 1
AND pf_harvest.date = '2017-03-22'
GROUP BY pf_harvest.id_product, pf_harvest.id_variety, pf_harvest.id_grade
ORDER BY pf_harvest.id_product, pr_varieties.variety, pf_harvest.id_grade;

它显示了以下结果:

代码语言:javascript
复制
-------------------------------------------------------------------
   PRODUCT     |     VARIETY     |     GRADE      |     QUANTITY  |
-------------------------------------------------------------------
   ROSE        |     ROSEV1      |     GRADE1     |     1000      |
-------------------------------------------------------------------
   ROSE        |     ROSEV1      |     GRADE2     |     5000      |
-------------------------------------------------------------------
   ROSE        |     ROSEV2      |     GRADE1     |     2000      |
-------------------------------------------------------------------
   ROSE1       |     ROSE1V1     |     GRADE1     |     3500      |
-------------------------------------------------------------------

是否可以按以下方式显示查询结果?

代码语言:javascript
复制
-------------------------------------------------------------------
  PRODUCT     |   VARIETY   |  GRADE1  |  GRADE2 |  TOTAL         |  
-------------------------------------------------------------------
   ROSE       |   ROSEV1    |  1000    |  5000   |  6000          |
-------------------------------------------------------------------
   ROSE       |   ROSEV2    |  2000    |    0    |  2000          |
-------------------------------------------------------------------
   ROSE1      |   ROSE1V1   |  3500    |    0    |  3500          |
-------------------------------------------------------------------

我试图更改查询,但我不能,我想知道是否可能,我希望有人能帮助我。

更新的注释:查询结果中可能有更多的分数(GRADE1、GRADE2、GRADE3.)。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-30 00:22:28

修改当前的查询,不要在GRADE列上分组,而是在该列上支点。然后,使用条件聚合计算GRADE1GRADE2列。

代码语言:javascript
复制
SELECT t3.product AS PRODUCT,
       t4.variety AS VARIETY,
       SUM(CASE WHEN t5.GRADE = 'GRADE1' THEN t1.quantity ELSE 0 END) AS GRADE1,
       SUM(CASE WHEN t5.GRADE = 'GRADE2' THEN t1.quantity ELSE 0 END) AS GRADE2,
       SUM(CASE WHEN t5.GRADE = 'GRADE3' THEN t1.quantity ELSE 0 END) AS GRADE3,
       -- hopefully it is clear how to add more grades
       SUM(t1.quantity) AS TOTAL
FROM pf_harvest t1
INNER JOIN pf_performance t2 
    ON t2.id = t1.id_performance
INNER JOIN pr_products t3
    ON t3.id = pf_harvest.id_product
INNER JOIN pr_varieties t4
    ON t4.id = t1.id_variety
INNER JOIN pr_grades t5
    ON t5.id = t1.id_grade
WHERE t2.status = 100 AND
      t1.id_tenant = 1 AND
      t1.date = '2017-03-22'
GROUP BY t1.id_product,
         t1.id_variety
ORDER BY t1.id_product,
         t4.variety,
         t1.id_grade;
票数 1
EN

Stack Overflow用户

发布于 2017-03-30 00:18:18

尝尝这个

添加了以下代码

代码语言:javascript
复制
sum(case when pr_grades.Grade='Grade1' then pf_harvest.quantity else 0 end)) [Grade1],
      sum(case when pr_grades.Grade='Grade2' then pf_harvest.quantity else 0 end)) [Grade2]
代码语言:javascript
复制
SELECT
  pr_products.product AS PRODUCT,
  pr_varieties.variety AS VARIETY,
  sum(case when pr_grades.Grade='Grade1' then pf_harvest.quantity else 0 end)) [Grade1],
  sum(case when pr_grades.Grade='Grade2' then pf_harvest.quantity else 0 end)) [Grade2],
  SUM(pf_harvest.quantity) AS TOTAL
FROM pf_harvest
INNER JOIN pf_performance
  ON pf_performance.id = pf_harvest.id_performance
INNER JOIN pr_products
  ON pr_products.id = pf_harvest.id_product
INNER JOIN pr_varieties
  ON pr_varieties.id = pf_harvest.id_variety
INNER JOIN pr_grades
  ON pr_grades.id = pf_harvest.id_grade
WHERE pf_performance.status = 100
AND pf_harvest.id_tenant = 1
AND pf_harvest.date = '2017-03-22'
GROUP BY pf_harvest.id_product,
         pf_harvest.id_variety
ORDER BY pf_harvest.id_product, pr_varieties.variety, pf_harvest.id_grade;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43106252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档