怎么在sql sqlserver 删除多列中删除某一列

计算某一列的“乘积“或者“与计算“,该如何做 - Sql Server当前位置:& &&&计算某一列的“乘积“或者“与计算“,该如何做计算某一列的“乘积“或者“与计算“,该如何做&&网友分享于:&&浏览:32次计算某一列的“乘积“或者“与计算“,该怎么做?例如:计算某一类的和,则用select & sum(a) & from & table
那么我想计算这一列的积呢,或者说把这一列的数值进行与运算,分别都该如何做呢------解决方案--------------------declare @a int
select @*a from table
------解决方案--------------------楼上正解....
------解决方案--------------------declare @t table(a int)
declare @b int
while(@b &=5)
insert into @t select @b
select * from @t;
select @*a from @t;
------解决方案--------------------是要先赋值,一楼给漏了.
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有sql server 如何用sql语句删除表中的一个字段_百度知道
sql server 如何用sql语句删除表中的一个字段
提问者采纳
ALTER TABLE table_name DROP COLUMN 字段
提问者评价
谢谢 我少写了个 column
其他类似问题
为您推荐:
sql语句的相关知识
其他1条回答
delete from 字段名称
咋没用呢? 在table1表中 有姓名 得分 名次3栏
删除名次这一栏 。求指教
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁目前有一张表,表名BM2008,
成交日期 证券名称 发生金额
万&&科A -2413.2
万&&科A -2478.56
万&&科A -7755.42
万&&科A -5170.29
设想一、想在 原表中增加一行并直接计算出某一列的和,效果如下。
成交日期 证券名称 发生金额
万&&科A -2413.2
万&&科A -2478.56
万&&科A -7755.42
万&&科A -5170.29
合计&&&&&&&&&&&&&&&&&&&&&&&&&-17817.47
设想二、如果上述设想有缺陷,不能实现。想在 原表中增加一列,计算前一列的累计数。效果如下。
成交日期 证券名称 发生金额&&&&累计
万&&科A -2413.2&&&&&-2413.2
万&&科A -2478.56&&&-4891.76
万&&科A -7755.42&&&-12647.18
万&&科A -5170.29&&&-17817.47
发生金额在可能是正数,也有可能是负数,最大两位小数。
谢谢!求达人给直接可运行的语句。只是提示,因我太菜,不会写语句。
回复讨论(解决方案)
select&成交日期,证券名称,发生金额&&from&BM2008
union&all&select&'合计','&',SUM(发生金额)&from&BM2008
可以直接union
FROM&BM2008
SELECT&'合计','',Sum([发生金额])
FROM&BM2008
用累计求和
先按顺序给每行加id
:with;WITH&cte&AS(SELECT&id=row_number()OVER(ORDER&BY&[成交日期]),*)
&&&&&&&[累计]=(SELECT&Sum([b.发生金额])
&&&&&&&&&&&&&FROM&&&cte&b
&&&&&&&&&&&&&WHERE&&b.id&&=&id)
FROM&&&cte&
;WITH&cte&AS(SELECT&id=row_number()OVER(ORDER&BY&[成交日期]),*)
&&&&&&&[累计]=(SELECT&Sum([b.发生金额])
&&&&&&&&&&&&&FROM&&&cte&b
&&&&&&&&&&&&&WHERE&&b.id&&=&id)
FROM&&&cte&&
;WITH&cte&AS(SELECT&id=row_number()OVER(ORDER&BY&[成交日期]),*&FROM&BM2008)
&&&&&&&[累计]=(SELECT&Sum([b.发生金额])
&&&&&&&&&&&&&FROM&&&cte&b
&&&&&&&&&&&&&WHERE&&b.id&&=&id)
FROM&&&cte&&
select&成交日期,证券名称,发生金额&&from&BM2008
union&all&select&'合计','&',SUM(发生金额)&from&BM2008
你好,运行后出提示
数据类型&从VARCHAR转为float时出错
select&*,IDENTITY(int,1,1)&as&Id&into&#temp&from&BM2008
select&成交日期,?券名?,?生金?,(select&SUM(abc.?生金?)&from&#temp&as&abc&where&abc.id&(def.id+1))&as&累?&from&#temp&as&def
select&成交日期,证券名称,发生金额&&from&BM2008
union&all&select&'合计','&',SUM(发生金额)&from&BM2008
你好,运行后出提示
数据类型&从VARCHAR转为float时出错
?“?生金?”的???型&varchar&改?decimal(13,2)
WITH&CTE&AS
SELECT&&AS&成交日期,'万&&科A'&AS&证券名称,-2413.2&AS&发生金额
UNION&ALL&SELECT&,'万&&科A',-2478.56
UNION&ALL&SELECT&,'万&&科A',-7755.42
UNION&ALL&SELECT&,'万&&科A',-5170.29
SELECT&成交日期,证券名称,发生金额,累计=(SELECT&SUM(发生金额)&FROM&CTE&b&WHERE&b.成交日期&=a.成交日期)
FROM&CTE&a
--成交日期 证券名称 发生金额 累计
-- 万&&科A -13.20
-- 万&&科A -91.76
-- 万&&科A -817.47
-- 万&&科A -817.47
WITH&CTE&AS
SELECT&&AS&成交日期,'万&&科A'&AS&证券名称,-2413.2&AS&发生金额
UNION&ALL&SELECT&,'万&&科A',-2478.56
UNION&ALL&SELECT&,'万&&科A',-7755.42
UNION&ALL&SELECT&,'万&&科A',-5170.29
SELECT&成交日期,证券名称,发生金额,累计=(SELECT&SUM(发生金额)&FROM&CTE&b&WHERE&b.成交日期&=a.成交日期)
FROM&CTE&a
--成交日期 证券名称 发生金额 累计
-- 万&&科A -13.20
-- 万&&科A -91.76
-- 万&&科A -817.47
-- 万&&科A -817.47
你好,我的表只是举个例子,实际的表行数太多,这个方法不实用,谢谢!
select&*,IDENTITY(int,1,1)&as&Id&into&#temp&from&BM2008
select&成交日期,?券名?,?生金?,(select&SUM(abc.?生金?)&from&#temp&as&abc&where&abc.id&(def.id+1))&as&累?&from&#temp&as&def
数据库中已存在名为&'#temp'&的对象。
SELECT&*,累计=(SELECT&SUM(发生金额)&FROM&tb&b&WHERE&b.成交日期&=a.成交日期)&FROM&tb&a
这个是没问题的
select&*,IDENTITY(int,1,1)&as&Id&into&#temp&from&BM2008
select&成交日期,?券名?,?生金?,(select&SUM(abc.?生金?)&from&#temp&as&abc&where&abc.id&(def.id+1))&as&累?&from&#temp&as&def
数据库中已存在名为&'#temp'&的对象。
在后面加个
DROP&TABLE&#TEMP
;WITH&cte&AS(SELECT&id=row_number()OVER(ORDER&BY&[成交日期]),*&FROM&BM2008)
&&&&&&&[累计]=(SELECT&Sum([b.发生金额])
&&&&&&&&&&&&&FROM&&&cte&b
&&&&&&&&&&&&&WHERE&&b.id&&=&id)
FROM&&&cte&&
你好!感谢你的答复。
证券名称&的原始&类型为&nvarchar(255)&,手工改为float无法保存。
从数据类型&varchar&转换为&float&时出错。
方案二、运行出提示
三个回复中运行也出错
列名&'b.发生金额'&无效。
select&*,IDENTITY(int,1,1)&as&Id&into&#temp&from&BM2008
select&成交日期,?券名?,?生金?,(select&SUM(abc.?生金?)&from&#temp&as&abc&where&abc.id&(def.id+1))&as&累?&from&#temp&as&def
数据库中已存在名为&'#temp'&的对象。
在后面加个
DROP&TABLE&#TEMP
谢谢感谢,如你所教,完美解决,谢谢!
----------------------------------------------------------------
--&Author&&:fredrickhu(小F,向高手学习)
--&Date&&&&:&15:17:55
--&Version:
--&&&&&&Microsoft&SQL&Server&2012&-&11.0.2100.60&(Intel&X86)&
-- Feb&10&:17&
-- Copyright&(c)&Microsoft&Corporation
-- Enterprise&Edition:&Core-based&Licensing&on&Windows&NT&6.1&&X86&&(Build&7601:&Service&Pack&1)
----------------------------------------------------------------
--&&测试数据:[bm2008]
if&object_id('[bm2008]')&is&not&null&drop&table&[bm2008]
create&table&[bm2008]([成交日期]&datetime,[证券名称]&nvarchar(255),[发生金额]&numeric(6,2))
insert&[bm2008]
select&'','万科A',-2413.2&union&all
select&'','万科A',-2478.56&union&all
select&'','万科A',-7755.42&union&all
select&'','万科A',-5170.29
--------------开始查询--------------------------
SELECT&*,累计=(SELECT&SUM(发生金额)&FROM&[bm2008]&b&WHERE&b.成交日期&=a.成交日期)&FROM&[bm2008]&a
----------------结果----------------------------
(4&行受影响)
成交日期&&&&&&&&&&&&&&&&&&&&证券名称&&发生金额&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&累计
-----------------------&-----&---------------------------------------&---------------------------------------
&00:00:00.000&万科A&&&-2413.20&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&-2413.20
&00:00:00.000&万科A&&&-2478.56&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&-4891.76
&00:00:00.000&万科A&&&-7755.42&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&-17817.47
&00:00:00.000&万科A&&&-5170.29&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&-17817.47
(4&行受影响)--删除某字段的所有关系
DECLARE @tbname SYSNAME ,
@fdname SYSNAME
@tbname = 't' --要处理的表名
@fdname = 'a'
--要处理的字段名
--定义删除处理的语句
DECLARE tb CURSOR local FOR
--默认值约束
SELECT sql='alter table ['+b.name+'] drop constraint ['+d.name+']'
FROM syscolumns a
JOIN sysobjects b ON a.id=b.id AND a.name=@fdname AND b.name=@tbname
JOIN syscomments c ON a.cdefault=c.id
JOIN sysobjects d ON c.id=d.id
UNION --外键引用
SELECT s='alter table ['+c.name+'] drop constraint ['+b.name+']'
FROM sysforeignkeys a
JOIN sysobjects b ON b.id=a.constid
JOIN sysobjects c ON c.id=a.fkeyid
JOIN syscolumns d ON d.id=c.id AND a.fkey=d.colid AND d.name=@fdname
JOIN sysobjects e ON e.id=a.rkeyid AND e.name=@tbname
JOIN syscolumns f ON f.id=e.id AND a.rkey=f.colid
UNION --主键/唯一键/索引
SELECT CASE WHEN e.xtype IN('PK','UQ') THEN 'alter table ['+c.name+'] drop constraint ['+e.name+']'
ELSE 'drop index ['+c.name+'].['+a.name+']' END
FROM sysindexes a
JOIN sysindexkeys b ON a.id=b.id AND a.indid=b.indid
JOIN sysobjects c ON b.id=c.id AND c.xtype='U' AND c.name=@tbname
JOIN syscolumns d ON b.id=d.id AND b.colid=d.colid AND d.name=@fdname
LEFT JOIN sysobjects e ON e.id=OBJECT_ID(a.name)
WHERE a.indid NOT IN(0,255)
--执行删除
DECLARE @s VARCHAR(8000)
FETCH NEXT FROM tb INTO @s
WHILE @@fetch_status = 0
FETCH NEXT FROM tb INTO @s
DEALLOCATE tb
(转自:鼠U猫)
阅读(...) 评论()> 超强的去除(删除)重复记录SQL语句From:--按某一字段分组取最大(小)值所在行的数据--(爱
超强的去除(删除)重复记录SQL语句From:--按某一字段分组取最大(小)值所在行的数据--(爱
wzzxyangchao & &
发布时间: & &
浏览:74 & &
回复:0 & &
悬赏:0.0希赛币
超强的去除(删除)重复记录SQL语句
From:--按某一字段分组取最大(小)值所在行的数据--(爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 于浙江杭州)/*数据如下:name val memoa&&& 2&& a2(a的第二个值)a&&& 1&& a1--a的第一个值a&&& 3&& a3:a的第三个值b&&& 1&& b1--b的第一个值b&&& 3&& b3:b的第三个值b&&& 2&& b2b2b2b2b&&& 4&& b4b4b&&& 5&& b5b5b5b5b5*/--创建表并插入数据:create table tb(name varchar(10),val int,memo varchar(20))insert into tb values('a',&&& 2,&& 'a2(a的第二个值)')insert into tb values('a',&&& 1,&& 'a1--a的第一个值')insert into tb values('a',&&& 3,&& 'a3:a的第三个值')insert into tb values('b',&&& 1,&& 'b1--b的第一个值')insert into tb values('b',&&& 3,&& 'b3:b的第三个值')insert into tb values('b',&&& 2,&& 'b2b2b2b2')insert into tb values('b',&&& 4,&& 'b4b4')insert into tb values('b',&&& 5,&& 'b5b5b5b5b5')go --一、按name分组取val最大的值所在行的数据。--方法1:select a.* from tb a where val = (select max(val) from tb where name = a.name) order by a.name--方法2:select a.* from tb a where not exists(select 1 from tb where name = a.name and val & a.val)--方法3:select a.* from tb a,(select name,max(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name--方法4:select a.* from tb a inner join (select name , max(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name--方法5select a.* from tb a where 1 & (select count(*) from tb where name = a.name and val & a.val ) order by a.name/*name&&&&&& val&&&&&&&& memo&&&&&&&&&&&&&&&& ---------- ----------- --------------------a&&&&&&&&& 3&&&&&&&&&& a3:a的第三个值b&&&&&&&&& 5&&&&&&&&&& b5b5b5b5b5*/ --二、按name分组取val最小的值所在行的数据。--方法1:select a.* from tb a where val = (select min(val) from tb where name = a.name) order by a.name--方法2:select a.* from tb a where not exists(select 1 from tb where name = a.name and val & a.val)--方法3:select a.* from tb a,(select name,min(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name--方法4:select a.* from tb a inner join (select name , min(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name--方法5select a.* from tb a where 1 & (select count(*) from tb where name = a.name and val & a.val) order by a.name/*name&&&&&& val&&&&&&&& memo&&&&&&&&&&&&&&&& ---------- ----------- --------------------a&&&&&&&&& 1&&&&&&&&&& a1--a的第一个值b&&&&&&&&& 1&&&&&&&&&& b1--b的第一个值*/ --三、按name分组取第一次出现的行所在的数据。select a.* from tb a where val = (select top 1 val from tb where name = a.name) order by a.name/*name&&&&&& val&&&&&&&& memo&&&&&&&&&&&&&&&& ---------- ----------- --------------------a&&&&&&&&& 2&&&&&&&&&& a2(a的第二个值)b&&&&&&&&& 1&&&&&&&&&& b1--b的第一个值*/ --四、按name分组随机取一条数据。select a.* from tb a where val = (select top 1 val from tb where name = a.name order by newid()) order by a.name/*name&&&&&& val&&&&&&&& memo&&&&&&&&&&&&&&&& ---------- ----------- --------------------a&&&&&&&&& 1&&&&&&&&&& a1--a的第一个值b&&&&&&&&& 5&&&&&&&&&& b5b5b5b5b5*/ --五、按name分组取最小的两个(N个)valselect a.* from tb a where 2 & (select count(*) from tb where name = a.name and val & a.val ) order by a.name,a.valselect a.* from tb a where val in (select top 2 val from tb where name=a.name order by val) order by a.name,a.valselect a.* from tb a where exists (select count(*) from tb where name = a.name and val & a.val having Count(*) & 2) order by a.name,a.val/*name&&&&&& val&&&&&&&& memo&&&&&&&&&&&&&&&& ---------- ----------- --------------------a&&&&&&&&& 1&&&&&&&&&& a1--a的第一个值a&&&&&&&&& 2&&&&&&&&&& a2(a的第二个值)b&&&&&&&&& 1&&&&&&&&&& b1--b的第一个值b&&&&&&&&& 2&&&&&&&&&& b2b2b2b2*/ --六、按name分组取最大的两个(N个)valselect a.* from tb a where 2 & (select count(*) from tb where name = a.name and val & a.val ) order by a.name,a.valselect a.* from tb a where val in (select top 2 val from tb where name=a.name order by val desc) order by a.name,a.valselect a.* from tb a where exists (select count(*) from tb where name = a.name and val & a.val having Count(*) & 2) order by a.name , a.val/*name&&&&&& val&&&&&&&& memo&&&&&&&&&&&&&&&& ---------- ----------- --------------------a&&&&&&&&& 2&&&&&&&&&& a2(a的第二个值)a&&&&&&&&& 3&&&&&&&&&& a3:a的第三个值b&&&&&&&&& 4&&&&&&&&&& b4b4b&&&&&&&&& 5&&&&&&&&&& b5b5b5b5b5*/--七,如果整行数据有重复,所有的列都相同。/*数据如下:name val memoa&&& 2&& a2(a的第二个值)a&&& 1&& a1--a的第一个值a&&& 1&& a1--a的第一个值a&&& 3&& a3:a的第三个值a&&& 3&& a3:a的第三个值b&&& 1&& b1--b的第一个值b&&& 3&& b3:b的第三个值b&&& 2&& b2b2b2b2b&&& 4&& b4b4b&&& 5&& b5b5b5b5b5*/--在sql server 2000中只能用一个临时表来解决,生成一个自增列,先对val取最大或最小,然后再通过自增列来取数据。--创建表并插入数据:create table tb(name varchar(10),val int,memo varchar(20))insert into tb values('a',&&& 2,&& 'a2(a的第二个值)')insert into tb values('a',&&& 1,&& 'a1--a的第一个值')insert into tb values('a',&&& 1,&& 'a1--a的第一个值')insert into tb values('a',&&& 3,&& 'a3:a的第三个值')insert into tb values('a',&&& 3,&& 'a3:a的第三个值')insert into tb values('b',&&& 1,&& 'b1--b的第一个值')insert into tb values('b',&&& 3,&& 'b3:b的第三个值')insert into tb values('b',&&& 2,&& 'b2b2b2b2')insert into tb values('b',&&& 4,&& 'b4b4')insert into tb values('b',&&& 5,&& 'b5b5b5b5b5')go select * , px = identity(int,1,1) into tmp from tb select m.name,m.val,m.memo from(& select t.* from tmp t where val = (select min(val) from tmp where name = t.name)) m where px = (select min(px) from(& select t.* from tmp t where val = (select min(val) from tmp where name = t.name)) n where n.name = m.name) drop table tb,tmp /*name&&&&&& val&&&&&&&& memo---------- ----------- --------------------a&&&&&&&&& 1&&&&&&&&&& a1--a的第一个值b&&&&&&&&& 1&&&&&&&&&& b1--b的第一个值 (2 行受影响)*/--在sql server 2005中可以使用row_number函数,不需要使用临时表。--创建表并插入数据:create table tb(name varchar(10),val int,memo varchar(20))insert into tb values('a',&&& 2,&& 'a2(a的第二个值)')insert into tb values('a',&&& 1,&& 'a1--a的第一个值')insert into tb values('a',&&& 1,&& 'a1--a的第一个值')insert into tb values('a',&&& 3,&& 'a3:a的第三个值')insert into tb values('a',&&& 3,&& 'a3:a的第三个值')insert into tb values('b',&&& 1,&& 'b1--b的第一个值')insert into tb values('b',&&& 3,&& 'b3:b的第三个值')insert into tb values('b',&&& 2,&& 'b2b2b2b2')insert into tb values('b',&&& 4,&& 'b4b4')insert into tb values('b',&&& 5,&& 'b5b5b5b5b5')go select m.name,m.val,m.memo from(& select * , px = row_number() over(order by name , val) from tb) m where px = (select min(px) from(& select * , px = row_number() over(order by name , val) from tb) n where n.name = m.name) drop table tb /*name&&&&&& val&&&&&&&& memo---------- ----------- --------------------a&&&&&&&&& 1&&&&&&&&&& a1--a的第一个值b&&&&&&&&& 1&&&&&&&&&& b1--b的第一个值 (2 行受影响)*/补充:如果用于比较的列的值是重复的,如何去除,参考:在select f1.* from dataset01 f1 where startDateTime=(select max(startDateTime) from dataset01 f2 where f1.name=f2.name)的基础上改为:select f1.* from dataset01 f1 where startDateTime||featureId=(select max(startDateTime)||max(featureId) from dataset01 f2 where f1.name=f2.name)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&

我要回帖

更多关于 sqlserver 删除一列 的文章

 

随机推荐