领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

5分钟掌握现有sql逻辑添加逻辑 deepseek提示词。亲身实战

nixiaole 2025-07-08 22:01:14 知识剖析 2 ℃

核心提示词:

-- 声明变量来存储动态 SQL 语句 DECLARE @DynamicSQL NVARCHAR(MAX); -- 声明变量来存储列名列表 DECLARE @ColumnList NVARCHAR(MAX); -- 动态生成列名列表 SELECT @ColumnList = COALESCE(@ColumnList + ', ', '') + 'SUM(CASE WHEN ddate = ''' + CAST(ddate AS NVARCHAR(255)) + ''' THEN chukushu ELSE 0 END) AS [' + CAST(ddate AS NVARCHAR(255)) + '_chukushu]' FROM (SELECT DISTINCT ddate FROM cailiao_zjh) AS Dates ORDER BY ddate; -- print @ColumnList -- 动态生成最终的 SQL 语句 SET @DynamicSQL = ' SELECT cun_huo_bian_ma, cinvname, cInvStd, dong_ji_da_lei_ming_cheng, huan_suan_lv, jin_liao_pi_hao, lu_hao, chang_du, xin_chu_wei, xiancunliang_kg, xiancunliang, gong_ying_shang, cinvmnemcode, qimojiechunshuliang, qimojiechunshuliang_kg,
cun_huo_ming_cheng_jian_cheng, gui_ge_jian_cheng, ' + @ColumnList + ' FROM cailiao_zjh GROUP BY cun_huo_bian_ma, cinvname, cInvStd, dong_ji_da_lei_ming_cheng, huan_suan_lv, jin_liao_pi_hao, lu_hao, chang_du, xin_chu_wei, xiancunliang_kg, xiancunliang, gong_ying_shang, cinvmnemcode, qimojiechunshuliang, qimojiechunshuliang_kg,
cun_huo_ming_cheng_jian_cheng, gui_ge_jian_cheng; '; --print @DynamicSQL -- 执行动态 SQL 语句 EXEC sp_executesql @DynamicSQL; sqlserver,上面的sql逻辑不变。 在 'SUM(CASE WHEN ddate = ''' + CAST(ddate AS NVARCHAR(255)) + ''' THEN chukushu ELSE 0 END) AS [' + CAST(ddate AS NVARCHAR(255)) + '_chukushu]' 这个逻辑上。 在加一个动态字段,rukushu 逻辑和上面一样


要实现在现有动态 SQL 中添加 `rukushu` 动态字段,需在生成列名列表时同步构建 `chukushu` 和 `rukushu` 的聚合逻辑。以下是修改后的完整代码及关键步骤说明:


---


修改后的完整代码

```sql

-- 声明变量

DECLARE @DynamicSQL NVARCHAR(MAX);

DECLARE @ColumnList NVARCHAR(MAX);


-- 动态生成列名列表(同时包含 chukushu 和 rukushu)

SELECT @ColumnList = COALESCE(@ColumnList + ', ', '') +

'SUM(CASE WHEN ddate = ''' + CAST(ddate AS NVARCHAR(255)) + ''' THEN chukushu ELSE 0 END) AS [' + CAST(ddate AS NVARCHAR(255)) + '_chukushu], ' +

'SUM(CASE WHEN ddate = ''' + CAST(ddate AS NVARCHAR(255)) + ''' THEN rukushu ELSE 0 END) AS [' + CAST(ddate AS NVARCHAR(255)) + '_rukushu]'

FROM (SELECT DISTINCT ddate FROM cailiao_zjh) AS Dates

ORDER BY ddate;


-- 动态生成最终 SQL 语句

SET @DynamicSQL = '

SELECT

cun_huo_bian_ma,

cinvname,

cInvStd,

dong_ji_da_lei_ming_cheng,

huan_suan_lv,

jin_liao_pi_hao,

lu_hao,

chang_du,

xin_chu_wei,

xiancunliang_kg,

xiancunliang,

gong_ying_shang,

cinvmnemcode,

qimojiechunshuliang,

qimojiechunshuliang_kg,

cun_huo_ming_cheng_jian_cheng,

gui_ge_jian_cheng,

' + @ColumnList + '

FROM cailiao_zjh

GROUP BY

cun_huo_bian_ma,

cinvname,

cInvStd,

dong_ji_da_lei_ming_cheng,

huan_suan_lv,

jin_liao_pi_hao,

lu_hao,

chang_du,

xin_chu_wei,

xiancunliang_kg,

xiancunliang,

gong_ying_shang,

cinvmnemcode,

qimojiechunshuliang,

qimojiechunshuliang_kg,

cun_huo_ming_cheng_jian_cheng,

gui_ge_jian_cheng;';


-- 执行动态 SQL

EXEC sp_executesql @DynamicSQL;

```


---


关键修改说明

1. 动态列生成逻辑扩展

在 `@ColumnList` 的构建中,每个 `ddate` 对应的聚合逻辑从单字段(`chukushu`)扩展为双字段(`chukushu` 和 `rukushu`)。通过在 `COALESCE` 中串联两个 `SUM(CASE)` 表达式,生成形如:

``` ```sql

[ddate_chukushu], [ddate_rukushu]

```


2. 列名格式一致性

新增的 `rukushu` 列名遵循与 `chukushu` 相同的命名规则(`ddate_字段名`),确保结果集结构清晰。


3. GROUP BY 子句无需修改

新增的聚合字段(`rukushu`)是通过 `SUM` 聚合生成的,无需在 `GROUP BY` 中添加额外列。


---


验证与注意事项

- 测试输出:可通过 `PRINT @ColumnList` 和 `PRINT @DynamicSQL` 检查生成的 SQL 语句是否符合预期。

- 性能优化:若 `ddate` 值较多,建议优化 `DISTINCT` 查询或添加索引以提升动态列生成效率。

- 安全增强:若 `ddate` 来源不可控,建议使用参数化查询避免 SQL 注入风险(当前代码假设 `ddate` 为可信数据)。


此方案在保持原有逻辑的基础上,通过扩展动态列生成逻辑,高效实现了 `rukushu` 字段的动态聚合需求。

最近发表
标签列表