cross apply和資料表值函式進行關聯查詢__函數

來源:互聯網
上載者:User

目前情境是有一個興趣愛好類型表和一個員工愛好表,員工愛好表中的愛好一列,如果這個員工有多個愛好,那麼就將這些愛好放到一條記錄當中,愛好之間用逗號隔開,現在需求是要將每個員工的這些愛好分隔成一條條記錄查詢出來,從而可以例如做員工愛好統計等應用。

愛好類型表 t_a

員工愛好表 t_b

需要的結果是

建立一個分隔字串的資料表值函式

create function [dbo].[splitIDs](    @Ids nvarchar(1000),    @split_char nvarchar(10))returns @t_id TABLE (id bigint)asbegin    declare @i int,@j int,@l int,@v bigint;    set @i = 0;    set @j = 0;    set @l = len(@Ids);    while(@j < @l)    begin       set @j = charindex(@split_char,@Ids,@i+1);       if(@j = 0) set @j = @l+1;       set @v = cast(SUBSTRING(@Ids,@i+1,@j-@i-1) as bigint);       INSERT INTO @t_id VALUES(@v)       set @i = @j;    end    return;endGO

採用下面的語句即可得到期望的結果

select     aid = t_a.id    ,aname = t_a.name    ,bid = t_b.id,t_b.namefrom t_bcross apply splitIDs(a_ids,',') tbl_IdsINNER JOIN t_a ON tbl_Ids .id = t_a.id

分割字串函數的另一種寫法

USE [master]GO/****** Object:  UserDefinedFunction [dbo].[Split]    Script Date: 05/08/2014 14:45:25 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER   FUNCTION [dbo].[Split]   (   @c VARCHAR(MAX) ,   @split VARCHAR(50)   )   RETURNS @t TABLE ( col VARCHAR(50) )   AS  BEGIN      WHILE ( CHARINDEX(@split, @c) <> 0 )           BEGIN              INSERT  @t( col )               VALUES  ( SUBSTRING(@c, 1, CHARINDEX(@split, @c) - 1) )               SET @c = STUFF(@c, 1, CHARINDEX(@split, @c), '')           END      INSERT  @t( col ) VALUES  ( @c )       RETURN  END-------------------------------END OF FUNCTION----------------------------------------------

使用方法

select * from Split('1,2,3',',')




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.