• 主页
  • 基础类
  • 应用实例
  • 新技术前沿

求一个简单的关于列计算的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一列一列的转换,结果也可以出来,但原查询的字段较多,书写太复杂,有没有简单一点的写法,谢谢
...全文
67 点赞 收藏 12
写回复
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
回复 点赞
发动态
发帖子
MS-SQL Server
创建于2007-09-28

1.4w+

社区成员

25.3w+

社区内容

MS-SQL Server相关内容讨论专区
社区公告
暂无公告