Simulating CROSS-TAB queries using CASE operator

Wednesday Jan 3rd 2001 by Maxim Smirnov
Share:

This example uses data from NORTHWIND database that comes with every SQL Server installation.

This example uses data from NORTHWIND database that comes with every SQL Server installation.

Two tables will be used in the query: EMPLOYEES and ORDERS.

Let's say that data analyst is preparing a presentation and interested in how many orders were placed by every particular employee during each year of operation.

Simple GROUP BY query will give quick answer to that question:

SELECT E.LastName, E.FirstName,

'Year' = DATEPART(year,OrderDate),

'OrdersPlaces' = COUNT(*)

FROM EMPLOYEES E,

ORDERS O

WHERE E.EmployeeID = O.EmployeeID

GROUP BY E.LastName, E.FirstName,

DATEPART(year,OrderDate)

An the result will be the following:

LastName

FirstName

Year

OrdersPlaced

Buchanan

Steven

1996

11

Buchanan

Steven

1997

18

Buchanan

Steven

1998

13

Callahan

Laura

1996

19

Callahan

Laura

1997

54

Callahan

Laura

1998

31

...

...

...

...

Davolio

Nancy

1996

26

Davolio

Nancy

1997

55

Davolio

Nancy

1998

42

This way of presenting data is absolutely correct and completely answers the questions but not convenient for analysis and definitely cannot be placed into presentation.

The best way of presenting such results would be simulating a cross tab query using CASE operator. For each record CASE will check if it falls under specified condition (e.g. year of order date is 1996) and issue 1 (true) or 0 (false). After that SUM operator will calculate the total number of orders placed grouping it by employee last and first name.

 

 

SELECT E.LastName, FirstName,

'1996' = SUM(CASE WHEN DATEPART(year,OrderDate) = 1996 THEN 1 ELSE 0 END),

'1997' = SUM(CASE WHEN DATEPART(year,OrderDate) = 1997 THEN 1 ELSE 0 END),

'1998' = SUM(CASE WHEN DATEPART(year,OrderDate) = 1998 THEN 1 ELSE 0 END)

FROM EMPLOYEES E,

ORDERS O

WHERE E.EmployeeID = O.EmployeeID

GROUP BY

E.LastName,

E.FirstName

 

The result of the that query:

LastName

FirstName

1996

1997

1998

Fuller

Andrew

16

41

39

Dodsworth

Anne

5

19

19

Leverling

Janet

18

71

38

Callahan

Laura

19

54

31

Peacock

Margaret

31

81

44

Suyama

Michael

15

33

19

Davolio

Nancy

26

55

42

King

Robert

11

36

25

Buchanan

Steven

11

18

13

Fuller

Andrew

16

41

39

Dodsworth

Anne

5

19

19

This way is more natural and convenient. Information is not duplicated and result can be pasted directly into the presentation document.

If you have any questions or would like to advise on how to improve this method please feel free to contact me at msmirnov@swynk.com.

Share:
Home
Mobile Site | Full Site
Copyright 2017 © QuinStreet Inc. All Rights Reserved