mysql - 将此 MySQL 转换为 Sybase

标签 mysql sql sap-ase

我有以下 MySQL:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'sum(case when perm = ''',
      perm,
      ''' then 1 else 0 end) AS ',
      perm
    )
  ) INTO @sql
FROM perms;

SET @sql = CONCAT('SELECT role, ', @sql, ' 
                  FROM perms 
                   GROUP BY role');

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

但是,我必须使用Sybase 12,有谁知道如何转换它?

最佳答案

试试这个:

declare cur_perm cursor for 
select perm from perms
go
declare @sql  varchar(4000) 
declare @perm varchar(4000) 

set @sql = ' '


open cur_perm
fetch cur_perm into @perm
while @@sqlstatus=0 begin
  select @sql = @sql+'sum(case when perm = '''+@perm+''' then 1 else 0 end) AS '''+@perm+''', '
  fetch cur_perm into @perm
end
close cur_perm
deallocate cursor cur_perm

select @sql = 'SELECT '+ @sql+' role 
                  FROM perms 
                   GROUP BY role'

exec(@sql)

关于mysql - 将此 MySQL 转换为 Sybase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13512262/

相关文章:

php - 如何显示数据库中存储的图像?

php - 视频无法通过 php 上传

php - WordPress 网站加载时显示错误

java - 编译 : near "=": syntax error (code 1): , WHERE _id = 时出现 SQLite 异常 : UPDATE person_table SET person_name=?

sql - 需要建议以根据审计表重新创建表的历史记录

mysql - MySQL 中出现未知错误

vb.net - 'Sybase ASE OLE DB Provider' 提供商未在本地计算机上注册

php - 当sql结果包含多行时,如何从中单独获取每一行?

c# - 为什么 Dapper 在构建 Command 时会删除任何参数前缀字符?

sql - 从多个字段中选择最大/最小值