求一个简单的关于列计算的SQL

yumanqing 2011-10-25 11:27:28
数据是这样的:

产品编号 产品名称 大包装数量 小包装数量 换算关系
001 AA 10 0 10
002 BB 0 12 12
003 CC 2 0 8

--------------
我需要得到的结果是:
产品编号 产品名称 大包装数量 小包装数量 换算关系
001 AA 10 100 10
002 BB 1 12 12
003 CC 2 16 8

--
就是根据换算关系算出另外一种计量的数量,SELECT语句怎么写?
我试过CASE WHEN一列一列的转换,结果也可以出来,但原查询的字段较多,书写太复杂,有没有简单一点的写法,谢谢
...全文
126 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yumanqing 2011-10-25
  • 打赏
  • 举报
回复
谢谢 ssp2009 (123)
你写的也对,但我觉得CASE更严谨,追加20分给你,不好意思哈

快溜 2011-10-25
  • 打赏
  • 举报
回复
算了好人做到底
declare @t table 
(产品编号 varchar(3),产品名称 varchar(2),大包装数量 int,小包装数量 int,换算关系 int)
insert into @t
select '001','AA',10,0,10 union all
select '002','BB',0,12,12 union all
select '003','CC',2,0,8

select 产品编号,产品名称,
大包装数量=大包装数量+小包装数量/换算关系,
小包装数量=大包装数量*换算关系+小包装数量,
换算关系
from @t

/*
产品编号 产品名称 大包装数量 小包装数量 换算关系
---- ---- ----------- ----------- -----------
001 AA 10 100 10
002 BB 1 12 12
003 CC 2 16 8

(3 行受影响)
快溜 2011-10-25
  • 打赏
  • 举报
回复
一楼写的不对吗?我服了you
yumanqing 2011-10-25
  • 打赏
  • 举报
回复

select 产品编号 , 产品名称,
(case when 大包装数量 = 0 then 小包装数量 / 换算关系 else 大包装数量 end) as 大包装数量,
(case when 小包装数量 = 0 then 大包装数量 * 换算关系 else 小包装数量 end) as 大包装数量,
换算关系
from tb


可能只能这样了,感谢各位,数据库是别人设计好了的,我只是查询个数据
q465897859 2011-10-25
  • 打赏
  • 举报
回复
[换算关系]=CASE WHEN [换算关系]=0 THEN [小包装数量]/[大包装数量] ELSE [换算关系] END
换算关系也是一种情况吧
中国风 2011-10-25
  • 打赏
  • 举报
回复
use Tempdb
go
--> -->

if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([产品编号] nvarchar(3),[产品名称] nvarchar(2),[大包装数量] int,[小包装数量] int,[换算关系] int)
Insert #T
select N'001',N'AA',10,0,10 union all
select N'002',N'BB',0,12,12 union all
select N'003',N'CC',2,0,8
Go
Select [产品编号],[产品名称],
[大包装数量]=CASE WHEN [大包装数量]=0 THEN [小包装数量]/[换算关系] ELSE [大包装数量] END,
[小包装数量]=CASE WHEN [小包装数量]=0 THEN [大包装数量]*[换算关系] ELSE [小包装数量] END,
[换算关系]
from #T
/*
产品编号 产品名称 大包装数量 小包装数量 换算关系
001 AA 10 100 10
002 BB 1 12 12
003 CC 2 16 8*/
--小F-- 2011-10-25
  • 打赏
  • 举报
回复
有一个关系表 然后和主表关联。。这个属于表设计时候的问题了
--小F-- 2011-10-25
  • 打赏
  • 举报
回复
你这个如果有一个关系表就简单了 没有的话还是只能用case when 来判断比较简单
dawugui 2011-10-25
  • 打赏
  • 举报
回复
貌似就是case when

select 产品编号 , 产品名称,
(case when 大包装数量 = 0 then 小包装数量 / 换算关系 else 大包装数量 end) 大包装数量,
(case when 小包装数量 = 0 then 大包装数量 * 换算关系 else 大包装数量 end) 大包装数量,
换算关系
from tb
geniuswjt 2011-10-25
  • 打赏
  • 举报
回复

--> 测试数据: [tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb] (产品编号 varchar(3),产品名称 varchar(2),大包装数量 int,小包装数量 int,换算关系 int)
insert into [tb]
select '001','AA',10,0,10 union all
select '002','BB',0,12,12 union all
select '003','CC',2,0,8

--开始查询
select 产品编号,产品名称,
大包装数量=case 大包装数量 when 0 then 小包装数量/换算关系 else 大包装数量 end,
小包装数量=case 小包装数量 when 0 then 大包装数量*换算关系 else 小包装数量 end,
换算关系
from [tb]

--结束查询
drop table [tb]

/*
产品编号 产品名称 大包装数量 小包装数量 换算关系
---- ---- ----------- ----------- -----------
001 AA 10 100 10
002 BB 1 12 12
003 CC 2 16 8

(3 行受影响)
叶子 2011-10-25
  • 打赏
  • 举报
回复

declare @t table
(产品编号 varchar(3),产品名称 varchar(2),大包装数量 int,小包装数量 int,换算关系 int)
insert into @t
select '001','AA',10,0,10 union all
select '002','BB',0,12,12 union all
select '003','CC',2,0,8

select
产品编号,产品名称,
大包装数量=CASE WHEN 大包装数量=0 THEN 小包装数量/换算关系 ELSE 大包装数量 end,
小包装数量=CASE WHEN 小包装数量=0 THEN 大包装数量*换算关系 ELSE 小包装数量 END,
换算关系 from @t

/*
产品编号 产品名称 大包装数量 小包装数量 换算关系
---- ---- ----------- ----------- -----------
001 AA 10 100 10
002 BB 1 12 12
003 CC 2 16 8
*/

--当字段很多的时候,换算关系是谁和谁的关系呢?
快溜 2011-10-25
  • 打赏
  • 举报
回复
select 产品编号,产品名称,
大包装数量=大包装数量+小包装数量/换算关系,
小包装数量=大包装数量*换算关系+小包装数量,
换算关系
from tb

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧