MySQL 求和与大小写查询

标签 mysql vb.net reportviewer report-viewer2010

我使用连接到 MySQL 数据库的 VB.NET 创建一个 ReportViewer。数据如下所示。

    IdProduct       Quantity       TotalPrice      OrderDate
    0001                1              10          29/09/2014
    0002                2              40          29/09/2014       
    0001                4              40          29/09/2014      
    0001                2              20          29/09/2014      
    0001                2              20          29/09/2014    

根据上面的记录,我希望结果如下所示

   0001   0002  
    9      2
    90     40   

查询求和大小写在这里的最佳用途是什么?提前致谢。

最佳答案

注意:查询不可能“动态”更改返回列的数量或数据类型,这些必须在解析 SQL 文本时指定。

要通过查询返回指定的结果集,您可以执行以下操作:

SELECT SUM(IF(t.IdProduct='0001',t.Quantity,NULL)) AS `0001`
     , SUM(IF(t.IdProduct='0002',t.Quantity,NULL)) AS `0002`
  FROM mytable t
 UNION ALL
SELECT SUM(IF(t.IdProduct='0001',t.TotalPrice,NULL)) AS `0001`
     , SUM(IF(t.IdProduct='0002',t.TotalPrice,NULL)) AS `0002`
  FROM mytable t

请注意,两个查询返回的数据类型需要兼容。如果 QuantityTotalPrice 都定义为整数,这不会成为问题。

此外,没有具体保证“Quantity”行位于“TotalPrice”行之前;我们观察到这种行为,并且它不太可能会有所不同。但是,为了得到保证,我们需要一个 ORDER BY 子句。因此,包括一个额外的鉴别器列(每个查询的 SELECT 列表中的文字),这将为我们提供一些可以 ORDER BY 的东西。

请注意,不可能让此单个查询动态地为 IdProduct“0003”创建另一列。我们需要将其添加到每个查询的 SELECT 列表中。

我们可以分两步完成此操作,使用查询获取不同 IdProduct 的列表,然后使用它动态创建我们需要的查询。

<小时/>

但是...话虽如此...我们不想这样做。

规范模式是将 QuantityTotalPrice 作为两个单独的列返回,并将 IdProduct 作为另一列返回。例如这条语句返回的结果:

SELECT t.IdProduct
     , SUM(t.Quantity) AS `Quantity`
     , SUM(t.TotalPrice) AS `TotalPrice`
  FROM mytable t
 GROUP BY t.IdProduct

然后客户端应用程序将负责将该结果集转换为所需的显示表示形式。

我们不想将该作业(将结果转换为显示表示形式)推送到 SQL 中。

关于MySQL 求和与大小写查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25571970/

相关文章:

mysql - 如果没有找到记录如何显示消息

mysql - 在字段名称周围使用反引号

mysql - 如何从另一台Windows计算机(Win 7)连接到安装在一台Windows计算机(XP)上的MySQL服务器?

php - 使用php和mysql的评分系统

c# - 需要 ScriptManager 的 Microsoft ReportViewer Web 控件

c# - 报告查看器版本 11.0.0.0。参数下拉不会第二次打开

vb.net - 未能创建组件 'ReportViewer'

mysql - 为什么当我尝试迁移 Thinking Sphinx 索引时 rake 任务被中止?

vb.net - 用于接收和发送的 udp 客户端不起作用

vb.net - 在 vb.net 中的 datagridview 中拖放