sql - 动态透视查询超出 varchar 的最大长度 (Microsoft SQL Server)
问题描述
我一直在尝试将行转换为 SQL 中的列。
像这样:
|*Name*|*Permissions*|
|App1 |Permission 1 |
|App1 |Permission 2 |
|App1 |Permission 3 |
|App2 |Permission 1 |
|App2 |Permission 2 |
|App2 |Permission 3 |
对此:
|*Name*|*Permission1*|*Permission2*|*Permission3*|
|App1 |Permission 1 |Permission 2 |Permission 3 |
|App2 |Permission 1 |Permission 2 |Permission 3 |
因此我一直在使用类似这样的代码来动态生成查询
declare @permission_id as VARCHAR(7);
declare @counter as int;
declare @query as VARCHAR(MAX);
declare @name as VARCHAR(15);
set @permission_id = 'permission_';
set @query = 'SELECT a.title, ';
set @counter = 0;
WHILE @counter < 3
BEGIN
PRINT @counter;
SET @counter = @counter + 1;
SET @name = (SELECT CONCAT(@permission_id, @counter));
SET @query = @query + ' select max(case when seqnum = '
SET @query = (SELECT CONCAT(@query, @counter))
SET @query = @query + ' then a.permission end) as '
SET @query = (SELECT CONCAT(@query, @name))
END
生成这样的查询:
select a.name,
max(case when seqnum = 1 then a.permission end) as permission_1,
max(case when seqnum = 2 then a.permission end) as permission_2,
max(case when seqnum = 3 then a.permission end) as permission_3
from (select a.*,
row_number() over (partition by a.name order by a.name) as seqnum
from apps a
) a
group by a.name;
结果对于最多 120 个权限工作正常,因为这是查询超过 varchar 最大长度的点。
在不连接查询的情况下,我还没有找到动态旋转的解决方案,也没有找到更长查询的解决方案。
这就是我问这个问题的原因。
有没有办法在没有 CONCAT 查询的情况下进行动态透视,或者有什么我可以使用的东西来代替 varchar?
谢谢!
解决方案
推荐阅读
- java - 为什么我的线程在调用服务方法时阻塞
- react-native - undefined is not an object(evalating 'this.localStorage.getItem') react-native中的错误
- typescript - 尝试发送消息时出现错误“Office.context.ui.messageParent 不是函数”
- spring - Spring Integration 重试建议配置
- c# - 从 GitHub(PowerShell 或 .net)上的私有仓库下载资产
- firebase - 颤振和火力| 我正在尝试为没有帐户的用户显示一个snackBar,但它显示在我的终端“[firebase_auth/user-not-found]”中
- html - 用浮动包装文本:权利不适用于 itch.io
- shell - 如何在 xonsh 子进程中扩展 shell 变量?
- node.js - 与 api 端点一起使用时,快速 glob 同步返回空数组
- javascript - 为什么我在 ASP.Net 中的cropper.js 文件上收到 404 错误,尽管它们正是程序正在寻找它们的位置?