Sql server® 2012 t-sql fundamentals



Download 10,93 Mb.
Pdf ko'rish
bet213/443
Sana26.01.2022
Hajmi10,93 Mb.
#411755
1   ...   209   210   211   212   213   214   215   216   ...   443
Bog'liq
BookSQL

 

CHAPTER 5

 

Table Expressions



 

 161

Using arguments

In the query that defines a derived table, you can refer to arguments. The arguments can be local 

variables and input parameters to a routine such as a stored procedure or function. For example, the 

following code declares and initializes a local variable called @empid, and the query in the code that 

is used to define the derived table D refers to the local variable in the WHERE clause.

DECLARE @empid AS INT = 3; 

 

SELECT orderyear, COUNT(DISTINCT custid) AS numcusts 



FROM (SELECT YEAR(orderdate) AS orderyear, custid 

      FROM Sales.Orders 

      WHERE empid = @empid) AS D 

GROUP BY orderyear;

This query returns the number of distinct customers per year whose orders were handled by the 

input employee (the employee whose ID is stored in the variable @empid). Here’s the output of this 

query.

orderyear   numcusts 



----------- ----------- 

2006        16 

2007        46 

2008        30



nesting

If you need to define a derived table by using a query that itself refers to a derived table, you end up 

nesting derived tables. Nesting of derived tables is a result of the fact that a derived table is defined 

in the FROM clause of the outer query and not separately. Nesting is a problematic aspect of pro-

gramming in general, because it tends to complicate the code and reduce its readability.

For example, the code in Listing 5-2 returns order years and the number of customers handled in 

each year only for years in which more than 70 customers were handled.

LISTING 5-2

  Query with Nested Derived Tables

SELECT orderyear, numcusts 

FROM (SELECT orderyear, COUNT(DISTINCT custid) AS numcusts 

      FROM (SELECT YEAR(orderdate) AS orderyear, custid 

            FROM Sales.Orders) AS D1 

      GROUP BY orderyear) AS D2 

WHERE numcusts > 70;

This code returns the following output.

orderyear   numcusts 

----------- ----------- 

2007        86 

2008        81

www.it-ebooks.info




162  

Microsoft SQL Server 2012 T-SQL Fundamentals

The purpose of the innermost derived table, D1, is to assign the column alias orderyear to the ex-

pression YEAR(orderdate). The query against D1 refers to orderyear in both the GROUP BY and SELECT 

clauses and assigns the column alias numcusts to the expression COUNT(DISTINCT custid). The query 

against D1 is used to define the derived table D2. The query against D2 refers to numcusts in the 



WHERE clause to filter order years in which more than 70 customers were handled.

The whole purpose of using table expressions in this example was to simplify the solution by reus-

ing column aliases instead of repeating expressions. However, with the complexity added by the nest-

ing aspect of derived tables, I’m not sure that the solution is simpler than the alternative, which does 

not make any use of derived tables but instead repeats expressions.

SELECT YEAR(orderdate) AS orderyear, COUNT(DISTINCT custid) AS numcusts 

FROM Sales.Orders 

GROUP BY YEAR(orderdate) 

HAVING COUNT(DISTINCT custid) > 70;

In short, nesting is a problematic aspect of derived tables.




Download 10,93 Mb.

Do'stlaringiz bilan baham:
1   ...   209   210   211   212   213   214   215   216   ...   443




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish