来几个前阵子冒出来的问题:1、如何建一个identity列, 值从9223372036854775808。 2、声明了表变量:declare @t table (id int identity),不用SET IDENTITY_INSERT,如何插入一条记录? 3、声明了表变量:declare @t table (id int identity),不用SET IDENTITY_INSERT,如何用insert一次插入多条记录?
调试欢乐多
-----------------------------------------------------------------------------------
现在有一个表结构如下:车型 起始站 终点站 票价
------ ------ ------ -----
依维柯 A E 200
依维柯 A D 180
依维柯 A B 70
依维柯 B C 60
依维柯 C E 90
依维柯 C D 50
依维柯 B E 120
依维柯 A C 80
沃尔沃 A E 260
沃尔沃 A B 60
沃尔沃 B E 180现在要写出SQL查询从起始站A到终点站E的所有可选路线及价格,查询出的结果如下:车型 线路 票价
-------- ---------- ---------
依维柯 A-E 200
依维柯 A-B-E 70+120
依维柯 A-C-E 80+90
依维柯 A-B-C-E 70+60+90
沃尔沃 A-E 260
沃尔沃 A-B-E 180+60注意:只有同一种车型才可以互相转车;每条线路必须是可达的,但不能有迂回,也就是说A、B、C、D、E是依次的走,不能反过来走。
2. declare @tb table(id decimal(38,0) identity(9223372036854775808,1))
insert @tb default values
3. 不知道
4.
declare @tb table
(
车型 varchar(20),
起始站 varchar(10),
终点站 varchar(10),
票价 int
)
insert @tb
select '依维柯','A','E', 200 union all
select '依维柯','A','D', 180 union all
select '依维柯','A','B', 70 union all
select '依维柯','B','C', 60 union all
select '依维柯','C','E', 90 union all
select '依维柯','C','D', 50 union all
select '依维柯','B','E', 120 union all
select '依维柯','A','C', 80 union all
select '沃尔沃','A','E', 260 union all
select '沃尔沃','A','B', 60 union all
select '沃尔沃','B','E', 180--查询
select distinct
A.车型
,A.起始站
+isnull('-'+A.终点站,'')
+isnull('-'+B.终点站,'')
+isnull('-'+C.终点站,'') as '路线'
,convert(varchar,A.票价)
+isnull('+'+convert(varchar,B.票价),'')
+isnull('+'+convert(varchar,C.票价),'') as '票价'from @tb A
left join @tb B on A.终点站=B.起始站 and A.车型=B.车型
left join @tb C on B.终点站=C.起始站 and B.车型=C.车型
left join @tb D on C.终点站=D.起始站 and C.车型=D.车型
where A.起始站='A'
and
( A.终点站='E' or
B.终点站='E' or
C.终点站='E' or
D.终点站='E'
)
order by A.车型--结果
/*车型 路线 票价
-------------------- --------------------------------
沃尔沃 A-B-E 60+180
沃尔沃 A-E 260
依维柯 A-B-C-E 70+60+90
依维柯 A-B-E 70+120
依维柯 A-C-E 80+90
依维柯 A-E 200(所影响的行数为 6 行)
*/
資料庫中表JP_JBSJBY的子段ztcx是這樣的φ444.5mm×253.00m+φ247.7mm×1274.98m+φ241.3mm×3566.93m現在寫一條sql語句,將它按照‘+’號分開,各個部分用欄位a1,a2,a3,a4,a5表示如果沒有五部分,象上面的只有3部分,那後面的就用空顯示就行,
怎樣來提取顯示a1,a2,a3,a4,a5這五個地段謝謝啊!!!
*/--測試
declare @iCount int
,@iPos int
,@vGetString varchar(100)
,@vString varchar(100)
,@cDivisionChar char(1)
,@vSQLString varchar(500)
,@vInSQLString varchar(500)select @vString='φ444.5mm×253.00m+φ247.7mm×1274.98m+φ241.3mm×3566.93m'
,@cDivisionChar='+'
if(right(rtrim(@vString),1)<>@cDivisionChar)
begin
set @vString=@vString+@cDivisionChar
end
select @iCount=len(@vString)-len(replace(@vString,@cDivisionChar,''))
,@iPos=1
,@vGetString=''select identity(int,1,1) ID into #Temp from sysobjects
select @vSQLString='create table TableName('
,@vInSQLString='insert into TableName('
select @vSQLString=@vSQLString+'a'+cast(id as varchar)+' varchar(50),'
,@vInSQLString=@vInSQLString+'a'+cast(id as varchar)+','
from #Temp where ID<=@iCount
select @vSQLString=left(@vSQLString,len(@vSQLString)-1)+')'
, @vInSQLString=left(@vInSQLString,len(@vInSQLString)-1)+')'
exec(@vSQLString)
drop table #Tempwhile(@iCount>=@iPos)
begin
select @vGetString=''''+replace(left(@vString,len(@vString)-1),@cDivisionChar,''',''')+''''
,@iPos=@iPos+1
,@vSQLString=@vInSQLString+' values('+@vGetString+')'
exec(@vSQLString)
end
select *
from TableName
--刪除測試環境
drop table TableName
/*
--所影響的結果
a1 a2 a3
φ444.5mm×253.00m φ247.7mm×1274.98m φ241.3mm×3566.93m
φ444.5mm×253.00m φ247.7mm×1274.98m φ241.3mm×3566.93m
φ444.5mm×253.00m φ247.7mm×1274.98m φ241.3mm×3566.93m*/
(N-1)*(N/4)-2*(N/4)*(N/4)+1
{
int i;
int a[100];
int s,b1,b2,sum;
clrscr();
a[1]=1;
for(i=2;i<100;i++)
a[i]=a[i-1]+4*(i-1);
printf("Please give a number:\n");
scanf("%d",&s);
b1=s/4;
b2=s%4;
sum=a[b1+1]-(4-b2)*b1;
printf("The number is:%d\n",sum);
getch();
}
100里的
{int n,y;
cin>>y;
if( (y%4)==0 )
n=y*y/8-y/2+1;
else
n=2*(y/4)*(y/4+1)+1-(4-(y%4))*(y/4);
cout<<"n="<<n<<endl;
}
觉的这个好一些
如果数据多了的话,还可能A-F 想了半天,还没有突破,大家都想一想沙1!!
这个问题答案???请诸位示之,多谢
union all select ....
union all select ....
不知道对不对?!呵呵!