सबसे पहले - apply
के साथ आप टेबल-मूल्यवान फ़ंक्शन को कॉल कर सकते हैं जहां आपके द्वारा क्वेरी की गई तालिका से पैरामीटर मान लिए गए हैं, कुछ इस तरह:
select
t1.col3, -- column from table
f1.col1 -- column from function
from table1 as t1
left outer join table2 as t2 on t2.col1 = t1.col1
outer apply dbo.function1(t1.col1, t2.col2) as f1
या xml कॉलम को तोड़ना
select
t1.col3,
t.c.value('@value', 'int') as value
from table1 as t1
-- table1.col1 is xml iike <Data @Value="...">...</Data>
outer apply t1.col1.nodes('Data') as t(c)
मेरे समाप्त होने के बाद, apply
बहुत उपयोगी होता है जब आपको कुछ पूर्व-गणना करना होता है :
select
t1.col3,
a1.col1, --calculated value
a2.col1 -- another calculated value, first one was used
from table1 as t1
outer apply (select t1.col1 * 5 as col1) as a1
outer apply (select a1.col1 - 4 as col1) as a2
apply
. का उपयोग करने का एक और उदाहरण अनपिवट है ऑपरेशन:
select
t1.col1, c.name, c.value
from table1 as t1
outer apply (
select 'col1', t1.col1 union all
select 'col2', t1.col2
) as c(name, value)
अंत में, यह रही आपकी क्वेरी लागू करें . का उपयोग किए बिना SQL 2005 के संदर्भ में लागू किया गया :
;with cte as (
select
y.Name,
y.hoursWorked,
x.game,
x.NumBets,
row_number() over(partition by x.Name order by x.NumBets) as row_num
from y
left outer join x on x.Name = y.Name
)
select Name, hoursWorked, game, NumBets
from cte
where row_num <= 2
order by Name, NumBets desc
देखें sql fiddle उदाहरण