mssql 如何在已有的表中 添加多个列名?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mssql 如何在已有的表中 添加多个列名?相关的知识,希望对你有一定的参考价值。

举例 已有表《学生》包含姓名,年龄,学分,先需在表中添加加入学日期,毕业日期 备注 等 使用sql语句

alter table 学生 add column 入学日期 date, add column 毕业日期 date, add column 备注 varchar(200);
然后你 select * from 学生 limit 1;
你就能看到加过之后的结果了。
参考技术A alter table 《学生》add column 入学日期 date
go
alter table 《学生》add column 毕业日期 date
go
alter table 《学生》add column 备注 varchar(200)
go
参考技术B 语法
ALTER TABLE 表 ADD ADDCOLUMN 字段类型 [ (字长)] [NOT NULL] [CONSTRAINT 索引 ] |
ALTER COLUMN 字段类型 [(字长)] |
CONSTRAINT 多重字段索引 |
DROP DROPCOLUMN 字段 I CONSTRAINT 索引名
ALTER TABLE 语句分为以下几个部分:
部分 说明
table 欲修改的表之名称。
field 欲在表内增加或删除的字段的名称。或表内欲被替换的字段名称。
type 字段的数据类型。
size 字段的字符长度 (文本及二进制字段)。
index 字段索引。欲了解更多有关如何构造本索引的信息,请看 CONSTRAINT子句。
multifieldindex 欲增加至表 中的多重字段索引的定义。欲了解更多有关如何构造本索引的信息,请看 CONSTRAINT子句。
indexname 欲删除的多重字段索引的名称。

如何在已有的SQL查询的语句中,再添加一个查询条件?

两个表,一个表是TBL_TicketBasic,里面存储了票号、票据时间、票据状态等信息;另一个表是TBL_TicketType,里面只有票据类型,票据类型分为客票和货票两种
现在已有一个SQL查询语句实现了查询客票超期6个月,货票超期3个月的所有的票据信息(超期就是从票据时间开始)语句如下:
select * from
(select a.*, b.TicketTypeKind from TBL_TicketBasic as a
left join
TBL_TicketType as b on a.TicketType = b.TicketTypeNo)as c
where (c.TicketTypeKind = '2' and c.InDatetime<dateadd(month,-3,getdate()))
or (c.TicketTypeKind = '1' and c.InDatetime<dateadd(month,-6,getdate()))

我要再添加一个条件,就是在以上的基础上,进一步筛选出票据状态为“未销号”的,请高手帮忙写出语句,谢谢,分数不够可追加
上面没说清楚,票据状态有很多,没有直接的“未销号”,S表示已经销号,排除S的语句怎样写?

参考技术A select * from
(
select a.*, b.TicketTypeKind from TBL_TicketBasic as a
left join
TBL_TicketType as b on a.TicketType = b.TicketTypeNo
)as c
where
(
(c.TicketTypeKind = '2' and c.InDatetime<dateadd(month,-3,getdate()))
or (c.TicketTypeKind = '1' and c.InDatetime<dateadd(month,-6,getdate())
)
and c.票据状态 = ‘未销号’
)追问

可能没描述清楚,S表示已经销号。。。排除S的语句怎么写?。。。

追答

是不要 已经销号 ,还是要 已经销号 的

下面假设不用 已销号的:

select * from
(
select a.*, b.TicketTypeKind from TBL_TicketBasic as a
left join
TBL_TicketType as b on a.TicketType = b.TicketTypeNo
)as c
where
(
(c.TicketTypeKind = '2' and c.InDatetime ‘S'
)

本回答被提问者和网友采纳
参考技术B

可以再嵌套一个

select *
from 
(
   select * 
   from
   (
       select a.*, b.TicketTypeKind 
       from TBL_TicketBasic as a
            left join TBL_TicketType as b on a.TicketType = b.TicketTypeNo
    )as c
    where (c.TicketTypeKind = '2' and c.InDatetime<dateadd(month,-3,getdate()))
       or (c.TicketTypeKind = '1' and c.InDatetime<dateadd(month,-6,getdate()))
)d
where d.TicketStatus not like '%S%'

----再或者用inner join 关联下

 select * 
   from
   (
       select a.*, b.TicketTypeKind 
       from TBL_TicketBasic as a
            left join TBL_TicketType as b on a.TicketType = b.TicketTypeNo
    )as c
        inner join (select * from TBL_TicketBasic(不确定状态字段在哪个表) where TicketStatus='未销号') e on a.TicketType=e.TicketType
    where (c.TicketTypeKind = '2' and c.InDatetime<dateadd(month,-3,getdate()))
        or (c.TicketTypeKind = '1' and c.InDatetime<dateadd(month,-6,getdate()))

追问

第二个方法查了以后有错误,第一个倒是没错误可是什么也查不到啊。。。我确定我的数据库表里有数据的,奇怪了我也想这样写的,可是就是有问题

追答

我不知道你状态的哪个字段是什么 在哪个表的 ?

参考技术C select * from TBL_TicketBasic
left join TBL_TicketType
on TBL_TicketType.id=TBL_TicketBasic.id ---希望表里有对应ID
where 票据时间>6 and id=客票 and 票据状态=未销号

union
select * from TBL_TicketBasic
left join TBL_TicketType
on TBL_TicketType.id=TBL_TicketBasic.id ---希望表里有对应ID
where 票据时间<3 and id=货票and 票据状态=未销号
参考技术D 把前面的两个or条件再用括号括起来,然后后面加and 条件就行了啊 第5个回答  2013-07-24 在你的基础上加上
where 票据状态=‘未销号’

以上是关于mssql 如何在已有的表中 添加多个列名?的主要内容,如果未能解决你的问题,请参考以下文章

如何在火花中连接多个列,同时从另一个表中连接列名(每行不同)

如何在已建立的流表中添加列?

如何在已有的SQL查询的语句中,再添加一个查询条件?

如何遍历表的列名并将值传递给 MSSQL while 循环中的 UDF

如何使用列名在 Excel 过滤表中选择多个不相邻的列

如何在数据库表中添加多个主键约束