SQL 多行合并为1行 需要写函数

 select * from formtable_main_20


sp_help formtable_main_20


--drop view zcountQJ01
create view zcountQJ01
as
select appman ,year(startdata) as zyear,jb,cast(sum(num) as decimal(4,1) ) as num
from formtable_main_20
where year(getdate()) = year(startdata)
group by appman,jb,year(startdata)


select * from  zcountQJ01
 
 


--drop function fn_str

  --创建函数
  CREATE   function   dbo.fn_strqj(@var_appman   int)  
  returns   varchar(100)  
  as    
  begin  
        declare   @var   varchar(100)  
        set   @var=''  
        select   @var=@var+
       -- cast(jb  as   varchar(10))
       case jb
           when 0 then '事假'
           when 1 then '病假'       
           when 2 then '婚假'
           when 3 then '丧假'
           when 4 then '哺乳假'
           when 5 then '探亲假'       
           when 6 then '公休假'
           when 7 then '年假'
           when 8 then '其他'
           when 8 then '护理假'
       end 

    +':'+cast(num  as   varchar(10))+','   from   [zcountQJ01]   where   appman=@var_appman  
       --select   @var=@var+':'+cast(num  as   varchar(10))+','   from   [zcountQJ01]   where   jb=@var_appman  
        if   len(@var)>0  
            set   @var=left(@var,len(@var)-1)  
      else  
            set   @var='   '  
        return(@var)  
  end


--drop view zcountQJ02
create view zcountQJ02
as
  select   distinct   appman,year(getdate()) as zyear ,dbo.fn_strqj(appman) as num   from   [zcountQJ01] 
go


select * from zcountQJ02


select (10.50,1)

 

--参考
--------------
學號   選修課  
07001     语文        
07001     数学        
07001     英语        
查詢結果    
學號       選修課
07001     語文;數學;英語

---------回复--------------
create   function   dbo.uf_gets(@学号   varchar(10))
returns   varchar(100)
as
begin
declare   @s   varchar(100)
set   @s= ' '
select   @s=@s+ '; '+选修课   from   表   where   学号=@学号
set   @s=stuff(@s,1,1, ' ')
return   @s
end
go
select   学号,dbo.uf_gets(学号)   as   '选修课 '   from   表
---------回复--------------
--創建函數
Create   Function   F_TEST(@學號   Varchar(100))
Returns   Nvarchar(1000)
As
Begin
Declare   @S   Nvarchar(1000)
Select   @S   =   ' '
Select   @S   =   @S   +   '; '   +   選修課   From   表   Where   學號   =   @學號
Select   @S   =   Stuff(@S,   1,   1,   ' ')
Return   @S
End
GO
--測試
Select
學號,
dbo.   F_TEST( 學號)   As   選修課
From

Group   By
學號
---------回复--------------
又慢了
---------回复--------------
--創建測試環境
Create   Table   表
(學號   Varchar(100),
  選修課   Nvarchar(100))
Insert   表   Select   '07001 ',     N '语文 '
Union   All   Select   '07001 ',     N '數學 '
Union   All   Select   '07001 ',     N '英語 '
GO
--創建函數
Create   Function   F_TEST(@學號   Varchar(100))
Returns   Nvarchar(1000)
As
Begin
Declare   @S   Nvarchar(1000)
Select   @S   =   ' '
Select   @S   =   @S   +   '; '   +   選修課   From   表   Where   學號   =   @學號
Select   @S   =   Stuff(@S,   1,   1,   ' ')
Return   @S
End
GO
--測試
Select
學號,
dbo.   F_TEST(學號)   As   選修課
From

Group   By
學號
GO
--刪除測試環境
Drop   Table   表
Drop   Function   F_TEST
--結果
/*
學號選修課
07001语文;數學;英語
*/
---------回复--------------
用函数是正解!
---------回复--------------
前面幾個老大都寫好了,函數可以的
---------回复--------------
楼上的前辈都在正确答案!
---------回复--------------
如果是多个   学号呢.
---------回复--------------
clbenben()   (   )   信誉:100     2007-07-19   14:36:25     得分:   0    
 
 
      如果是多个   学号呢.
   
 
------------------
以上函數同樣可以適用多個學號的。
---------回复--------------
--創建測試環境
Create   Table   表
(學號   Varchar(100),
  選修課   Nvarchar(100))
Insert   表   Select   '07001 ',     N '语文 '
Union   All   Select   '07001 ',     N '數學 '
Union   All   Select   '07001 ',     N '英語 '
Union   All   Select   '07002 ',     N '數學 '
Union   All   Select   '07002 ',     N '英語 '
Union   All   Select   '07003 ',     N '英語 '
GO
--創建函數
Create   Function   F_TEST(@學號   Varchar(100))
Returns   Nvarchar(1000)
As
Begin
Declare   @S   Nvarchar(1000)
Select   @S   =   ' '
Select   @S   =   @S   +   '; '   +   選修課   From   表   Where   學號   =   @學號
Select   @S   =   Stuff(@S,   1,   1,   ' ')
Return   @S
End
GO
--測試
Select
學號,
dbo.   F_TEST(學號)   As   選修課
From

Group   By
學號
GO
--刪除測試環境
Drop   Table   表
Drop   Function   F_TEST
--結果
/*
學號選修課
07001语文;數學;英語
07002數學;英語
07003英語

*/

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

紫气东来_999

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值