【问题标题】:Display record in customize view [closed]在自定义视图中显示记录[关闭]
【发布时间】:2013-06-29 09:04:04
【问题描述】:

我有两个名为

的表

风格:

==================== 编号 |风格 ==================== 1 | X ==================== 2 |是的

尺寸:

============================================ 编号 |尺寸名称 | style_id |数量 ============================================ 1 | 2T | 1 | 200 ============================================ 2 | 3T | 1 | 100 ============================================ 3 | 4T | 2 | 250 ============================================ 4 | 2T | 2 | 500

使用这两个表我想要一个如下的报告:

============================================== 风格 |尺寸 ============================================== | 2T | 3T | 4T | ============================================== x | 200 | 100 | 0 | ============================================== 是 | 500 | 0 | 250 |

先谢谢了。请帮忙

【问题讨论】:

  • 然后从你能做的开始,然后在你的代码上发布不适合你的东西。
  • 如果你分解输出并一次取一行,这很容易......逻辑思考。你会得到解决方案。要向正确的方向轻推您,请使用 DISTINCT sizename 查询获取可自定义表格的第二行
  • 我不想尝试任何事情,因为我只是不知道该做什么
  • 你能写出查询吗? @asprin
  • 我们在 stackoverflow 期望人们付出一些努力,你知道如何连接到数据库吗?你知道如何循环和读取值吗?从写你知道的开始,直到你写到你不知道的部分,然后把你所做的发回。 Also take your time to visit the TOUR

标签: php mysql


【解决方案1】:

静态查询(如果您知道 size_name 数量有限)

SELECT st.Style
  ,SUM(CASE WHEN s.size_name = '2T' THEN Quantity ELSE 0 END) AS `2T`
  ,SUM(CASE WHEN s.size_name = '3T' THEN Quantity ELSE 0 END) AS `3T`
  ,SUM(CASE WHEN s.size_name = '4T' THEN Quantity ELSE 0 END) AS `4T`
FROM Size s
JOIN Style st ON s.style_id = st.id
GROUP BY st.Style;

动态查询(如果不知道size_name的个数)

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(CASE WHEN `size_name` = ''',
      `size_name`,
      ''' THEN Quantity ELSE 0 END) AS `',
      `size_name`, '`'
    )
  ) INTO @sql
FROM Size;

SET @sql = CONCAT('SELECT st.Style , ', @sql, '
                  FROM Size s
                  JOIN Style st ON s.style_id = st.id
                   GROUP BY st.Style 
                  ');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

输出:

╔══════╦═════╦═════╦═════╗
║ TYLE ║ 2T  ║ 3T  ║ 4T  ║
╠══════╬═════╬═════╬═════╣
║ x    ║ 200 ║ 100 ║   0 ║
║ y    ║ 500 ║   0 ║ 250 ║
╚══════╩═════╩═════╩═════╝

this SQLFiddle

【讨论】:

  • 它在 mysql 上不起作用,我将它复制并粘贴到 mysql 中但显示一个空的结果集。
  • 我现在应该做什么。
  • @Wolverine - 工作正常。你检查this SQLFiddle了吗?
  • 是的,这个 cide 在 sqlFiddle 中有效,但在本地服务器中无效。怎么办?
  • @Wolverine - 不可能。你可能错过了什么。您的表名、列名和示例数据是否与本示例中给出的相同?
【解决方案2】:

试试这个

  select 
  style , 
  max(case when size_name = '2T' then Quantity else 0 end) as '2T' ,
  max(case when size_name = '3T' then Quantity else 0 end) as '3T' ,
  max(case when size_name = '4T' then Quantity else 0 end) as '4T'
  from style inner join size
  on size.style_id = style.id
  group by style.id

demo here

【讨论】:

  • 尺寸名称不是静态的,它是动态的,如果是动态的,那么查询@echo Samir 会是什么
猜你喜欢
  • 1970-01-01
  • 2020-06-04
  • 2015-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多