欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Sql Server中Cross Apply關鍵字的使用 詳解

 更新時間:2023年11月13日 09:29:38   作者:妙妙屋  
在 SQL Server 中,Cross Apply 關鍵字主要用于從一個表中獲取數(shù)據(jù),并對每一行數(shù)據(jù)應用一個表值函數(shù),然后返回函數(shù)的結果,這篇文章主要介紹了Sql Server中Cross Apply關鍵字的使用 ,需要的朋友可以參考下

Sql Server中Cross Apply關鍵字的使用

前言

在寫一個業(yè)務的時候,有1列數(shù)據(jù)如下:

車牌號
湘A00001/湘G00001
湘A00002/湘G00002
湘A00003/湘G00003/湘A8888888
湘A00004/湘G00004/湘A00001

我的查詢條件也是車牌號,我會傳入如下參數(shù):

@PLATE_NO '湘A00003/湘G00003/湘A8888888'

我需要判斷我傳入的車牌號是否包含上面的列數(shù)據(jù),舉例上面的表為B表,那么B表列中的車牌號,我的PLATE_NO參數(shù)需要包含里面所有的車牌號。

一個簡單的包含關系,我會用拆分函數(shù)去拆分我傳入的參數(shù),然后去比對參數(shù)是否包含B表的車牌號。對于參數(shù)處理很簡單,但是B表的多行,那么該如何去處理B表的列呢?

Cross Apply介紹

在 SQL Server 中,Cross Apply 關鍵字主要用于從一個表中獲取數(shù)據(jù),并對每一行數(shù)據(jù)應用一個表值函數(shù),然后返回函數(shù)的結果。這個關鍵字允許你在右側的表達式中引用左側表的列。

Cross Apply 和 Inner Join 類似,只返回匹配的記錄。如果沒有匹配的記錄,那么就不會返回任何結果。

思路

首先肯定需要通過‘/’拆分獲得車牌號數(shù)據(jù),將湘A00003/湘G00003/湘A8888888變成如下格式

col
湘A00003
湘G00003
湘A8888888

那么B表該如何去實現(xiàn),它有多行數(shù)據(jù),多行數(shù)據(jù)如何拆分成一列。

代碼實現(xiàn)

首先我們需要有一個表值函數(shù)來拆分字符串:

CREATE FUNCTION dbo.SplitString
(
    @List NVARCHAR(MAX),
    @Delim NVARCHAR(255)
)
RETURNS TABLE
AS
RETURN 
(
    SELECT Item = y.i.value('(./text())[1]', 'nvarchar(4000)')
    FROM 
    ( 
        SELECT x = CONVERT(XML, '<i>' 
        + REPLACE(@List, @Delim, '</i><i>') 
        + '</i>').query('.')
    ) AS a CROSS APPLY x.nodes('i') AS y(i)
);

實現(xiàn)方式很多,我這里直接讓GPT生成了一個,執(zhí)行上述代碼即可完成拆分函數(shù)創(chuàng)建,調用如下:

SELECT Item FROM dbo.SplitString('湘A00003/湘G00003/湘A8888888', '/');

對于B表的操作,就需要使用到Cross Apply關鍵字了,我對每一行數(shù)據(jù)車票號進行拆分操作,然后將數(shù)據(jù)存于臨時表,并去重處理。

SELECT DISTINCT
split.col
INTO #TEMP
FROM B
CROSS APPLY dbo.SplitString(車牌號, '/') AS split;

拆分結果如下

col
湘A00001
湘G00001
湘A00002
...

然后在進行比對查詢

將參數(shù)存放在TEMP01臨時表,將B表拆分的數(shù)據(jù)存于TEMP02臨時表,然后使用CASE WHENTEMP02為主表判斷TEMP01列是否存在與02中,不能存在則新建一列賦值為0

SELECT 
P.Item,
CASE
WHEN EXISTS
(
SELECT 1 FROM TEMP01 WHERE Item = P.Item
)          THEN
    1
ELSE
    0 
END AS ISBOOL
FROM TEMP02 P

結果如下,這里只是舉例子,主要是體現(xiàn)Cross Apply的作用。

總結

簡單來說 Cross Apply 看作是 SQL Server 中的一個"循環(huán)"操作。對于你在左邊的表中的每一行數(shù)據(jù),Cross Apply 都會執(zhí)行一次右邊的查詢。我上述的操作就是多列數(shù)據(jù)使用實現(xiàn)Cross Apply循環(huán)拆分每行數(shù)據(jù)的車牌號列。

到此這篇關于Sql Server中Cross Apply關鍵字的使用 的文章就介紹到這了,更多相關Sql Server Cross Apply關鍵字內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論