使用T-SQL为dbo.asientti表创建条件列分离借贷金额
解决方法:将D/H标识的金额拆分为借方和贷方列
完全明白你的需求!我们可以用SQL的CASE条件判断语句轻松实现金额的拆分,把原来的单金额列根据D/H标识分别映射到独立的借方、贷方列中。下面分几种常用场景给出具体实现:
一、直接查询拆分结果(临时查看)
如果只是需要查询时展示拆分后的列,不需要修改原表,用这个语句就够了:
SELECT -- 保留原表中需要的其他列,比如凭证号、交易日期等,按需添加 凭证号, 交易日期, -- 当D/H为'D'时取金额,否则显示0 CASE WHEN [D/H] = 'D' THEN 金额 ELSE 0 END AS 借方金额, -- 当D/H为'H'时取金额,否则显示0 CASE WHEN [D/H] = 'H' THEN 金额 ELSE 0 END AS 贷方金额 FROM dbo.asientti;
二、创建新表存储拆分后的数据
如果需要长期保存拆分结果,可以新建一张表来存储结构化后的信息:
-- 先创建新表,包含原表的必要字段+拆分后的借贷列 CREATE TABLE dbo.asientti_split ( 凭证号 INT PRIMARY KEY, -- 替换为你实际的主键字段 交易日期 DATE, 摘要 VARCHAR(100), 借方金额 DECIMAL(18,2), -- 金额类型根据实际场景调整,比如INT、FLOAT等 贷方金额 DECIMAL(18,2) ); -- 从原表插入拆分后的数据 INSERT INTO dbo.asientti_split (凭证号, 交易日期, 摘要, 借方金额, 贷方金额) SELECT 凭证号, 交易日期, 摘要, CASE WHEN [D/H] = 'D' THEN 金额 ELSE 0 END, CASE WHEN [D/H] = 'H' THEN 金额 ELSE 0 END FROM dbo.asientti;
三、在原表中新增借贷列并填充数据
如果希望直接在原表上扩展字段,不用新建表,可以这样操作:
-- 先添加借方、贷方列 ALTER TABLE dbo.asientti ADD 借方金额 DECIMAL(18,2); ALTER TABLE dbo.asientti ADD 贷方金额 DECIMAL(18,2); -- 更新列数据 UPDATE dbo.asientti SET 借方金额 = CASE WHEN [D/H] = 'D' THEN 金额 ELSE 0 END, 贷方金额 = CASE WHEN [D/H] = 'H' THEN 金额 ELSE 0 END;
小提示:
- 请把代码里的
凭证号、交易日期、金额等字段名替换成你表中的实际列名 - 金额类型(比如
DECIMAL(18,2))要根据原表的金额字段类型调整,原字段是INT就改成INT,是FLOAT就改成FLOAT - 如果用的是MySQL,方括号
[]要换成反引号`,比如`D/H`
内容的提问来源于stack exchange,提问作者Techie Philosopher
相关产品推荐
相关产品推荐

