当前位置: 首页 > 知识库问答 >
问题:

如何将存储过程转换为单个SQL语句

丌官运诚
2023-03-14

我的数据库中有一个表,它看起来像(表中可以有相同的元组):

+-------------+---------+--------+
| ProductName | Status  | Branch |
+-------------+---------+--------+
| P1          | dead    |      1 |
| P1          | dead    |      2 |
| P1          | dead    |      2 |
| P2          | expired |      1 |
+-------------+---------+--------+

我必须在as(Branch属性是动态的)后面显示结果:

+-------------+---------+--------+
| ProductName | Branch 1|Branch 2|
+-------------+---------+--------+
| P1          | dead    |    dead|
| P2          | expired |     OK |
+-------------+---------+--------+
    SET @sql = NULL;
    SELECT
    GROUP_CONCAT(DISTINCT
       CONCAT(
       'COALESCE(GROUP_CONCAT(DISTINCT case when branch = ''',
       branch,
       ''' then  status  end),''OK'') AS ',
       CONCAT('Branch',branch)
       )
    ) INTO @sql
    FROM Table1;

    SET @sql = CONCAT('SELECT productName, ', @sql, ' 
    FROM Table1 
    GROUP BY productName');

    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    
+-------------+---------+-----------+
| productName | Branch1 |  Branch2  |
+-------------+---------+-----------+
| p1          | dead    |    dead   |
| p2          | expired |    OK     |
+-------------+---------+-----------+

我希望将此过程转换为单个SQL语句。我试过了,但找不到解决办法。我怎样才能做到这一点呢?谢谢

共有1个答案

怀浩大
2023-03-14

这个确切的结果(因为它是由存储过程产生的,在运行时确定列数)不能在单个SQL select语句中再现。这不可能.

 类似资料:
  • 我目前正在从事一个项目,该项目需要利用存储在SQL db中的数据,其格式如下所示。 我需要做的,而且我很难找到一个工具来帮助,是获取这些数据,并创建一个多列的单一记录,该记录与ID和事件日期相分离。虽然我在网上找到了一些关于事件驱动处理程序的信息,但问题是,虽然我的标签上写着“event ”,但实际上存储的是被称为“Events”的单独的数据片段,这些数据片段实际上是单独的条目,它们经常(但不总是

  • 我有数字,我想在存储过程中将这些数字转换成字符串。 请回复。 谢谢!

  • 问题内容: 我有一个需要很多参数的插入存储过程-其中2个是@ FirstName,@ LastName。我还有一个更新存储过程,该过程需要许多参数-其中2个是@ FirstName,@ LastName。 我想做的是,从插入SP内部完成之后,调用更新SP并将其发送给@ FirstName,@ LastName。 我不知道这样做的正确语法;我试过了: 但我认为这是错误的。 有人可以告诉我怎么写这个电

  • 问题内容: 我在存储过程中有一条更新语句,该语句通常如下所示: 是否只有当变量不为null或值-1时才触发更新语句的好方法? 类似于一个问题。 太感谢了。 问题答案: 使用T-SQL : 看一下MSDN文档。

  • 例如,我有一个员工列表。我想将这个列表作为一个表,并将它与另一个表连接起来。但是员工列表应该作为参数从C#传递。

  • 主要内容:示例Transact SQL 中的存储过程用于一次又一次地节省编写代码的时间。它通过将过程存储在数据库中并通过传递参数来获得所需的输出来实现这一点。 语法: 下面是存储过程创建的语法 - 参数可选:当我们创建一个过程时,一个或多个参数被传递到过程中。存储过程中有3种类型的参数: IN - 过程可以引用参数。该过程将覆盖参数的值。 OUT- 过程不能引用参数,但过程会覆盖参数值。 IN OUT- 参数被