2007年11月28日 星期三

有關select 自動 編號

select no= identity(int,1,1),* into #tmp from table
然後再 select * from #tmp 出來看

SQL Server不像oracle一樣
所以要用特殊方法解決



AA.03.03.01  同一工作(用count)

利用同一table,然後搭配group by
優點:
 容易撰寫
 可以搭配view來執行

缺點:
 執行速度慢
 用多欄位時很麻煩

例子:
create view vw_test_Date
as
 select rank=count(*), a1.trade_date
  from AM_Date a1, AM_Date a2
  where a1.trade_date> a2.trade_date
  group by a1.trade_date
go


select * from vw_test_Date order by 1






AA.03.03.02  利用Function(用cursor)

只用一個table,然後搭配cursor
優點:
 執行速度較快
 可以搭配function來執行

缺點:
 不容易撰寫


例子:
alter FUNCTION fn_test_Date(
 )
 RETURNS @ret_Table TABLE (
  rank int,
  trade_date varchar(8)
 )
 AS
 BEGIN
  declare @pi_var int
  declare @pi_Date varchar(8)
  set @pi_var=1
  declare Cus_Menu cursor for
   select trade_date from AM_Date
  open Cus_Menu
   fetch next from Cus_Menu into @pi_Date
  while @@fetch_status =0 begin
   insert @ret_Table
   select @pi_var, @pi_Date
   set @pi_var=@pi_var+1
   fetch next from Cus_Menu into @pi_Date
  end

  close Cus_Menu
  deallocate Cus_Menu

  RETURN
 END
go


select * from fn_test_Date()

沒有留言: