sql-server - 从表中提取 SQL 字符串以执行
问题描述
我收到此错误:
消息 120,级别 15,状态 1,第 12 行
INSERT 语句的选择列表包含的项目少于插入列表。SELECT 值的数量必须与 INSERT 列的数量相匹配。
我如何从表中选择一个字符串并insert into @t1
获得最终结果,例如:
| Date1 | Date2 | Date3 | Date4 | Date5 |
+-------------+-------------+--------------+-------------+---------------+
|'Feb 5 2019'|'Feb 4 2019'|'Feb 1 2019 '|'Jan 30 2019'|'Jan 18 2019 ' |
我必须运行一个存储过程来创建一个动态列。
找到最大列数后,我创建表并尝试插入表中。
我想从一个字符串中选择一些语句,并将这些 SQL 字符串存储在这样的表中
我的代码显示:
declare @t1 table (id0 datetime,id1 datetime,id2 datetime,id3 datetime,id4 datetime)
INSERT INTO @t1 (id0,id1,id2,id3,id4)
select Dates = STUFF((
SELECT ',''' +TRSDate + '''' FROM [StandaloneDWH].[zru].[r435_436tcr] where CLM_Id =90
FOR XML PATH('')
), 1, 1, '')
执行代码后:
select Dates = STUFF((
SELECT ',''' +TRSDate + '''' FROM [StandaloneDWH].[zru].[r435_436tcr] where CLM_Id =90
FOR XML PATH('')
), 1, 1, '')
表明:
| Dates |
|------------------------------------------------------------------------|
|'Feb 5 2019','Feb 4 2019','Feb 1 2019 ','Jan 30 2019','Jan 18 2019 ' |
我怎么能这样执行并插入@t1
select
'Feb 5 2019','Feb 4 2019','Feb 1 2019 ','Jan 30 2019','Jan 18 2019 '
得到最终结果?
解决方案
我认为你想要条件聚合:
insert into @t1 (id0, id1, id2, id3, id4)
select max(case when seqnum = 1 then trsdate end),
max(case when seqnum = 2 then trsdate end),
max(case when seqnum = 3 then trsdate end),
max(case when seqnum = 4 then trsdate end),
max(case when seqnum = 5 then trsdate end)
from (select r.*,
row_number() over (order by trsdate) as seqnum
from [StandaloneDWH].[zru].[r435_436tcr] r
where CLM_Id = 90
) r;
您也可以pivot
用于逻辑。或者使用您的方法生成动态 SQL。
推荐阅读
- mysql - 添加具有数字名称的列时出错
- django - 在 django orm 中使用 annotate() 在 MariaDB 服务器上运行 hasrsine 公式
- python - 为什么'return'不会破坏嵌套在函数中的循环?
- python - 如何保留 Azure Cosmos DB 连续令牌
- java - 如何在 HarmonyOS 中检测自定义组件中的双击?
- reactjs - 如何处理每个依赖包的 IE11 兼容性?
- windows - 有什么方法可以让我的 SQLPLUS 脚本的输出看起来更好?
- pandas - 使用 awswrangler 向 S3 对象添加标签?
- html - 是否可以手动操作元素中的 css 断点(无 iframe)?
- vue.js - 构建后 Electron Vue 不读取 JS 代码