-- **************************************************************************
-- * COALESCE FUNCTION *
-- * *
-- * This functions returns the first non-null value of its arguments. *
-- * When all arguments are null; null is returned. *
-- **************************************************************************
exec spDeleteObj 't1', 3, 0
go
create table t1
(
id int identity(1,1) not null,
cola int,
colb int,
colc int
)
set nocount on
insert into t1 values (1, null, null)
insert into t1 values (null, 2, null)
insert into t1 values (null, null, 3)
insert into t1 values (null, null, null)
set nocount off
-- When none of the columns contains a value 999 is returned
select cast(coalesce(cola, colb, colc, 999) as money) * 2 ColX from t1
-- When all values are null the row is in the resultset
select id from t1 where coalesce(cola, colb, colc) IS NULL
-- **************************************************************************
-- * GROUP BY and HAVING clause *
-- * *
-- * Table "Customer" and table "Region" *
-- * - a customer belongs to 1 region. A region has 0 or more customersn *
-- * *
-- * Only the column on which is grouped can be in the selectlist. All other*
-- * columns in the selectlist must have a aggregate function. *
-- **************************************************************************
exec spDeleteObj 'Customer', 3, 0
exec spDeleteObj 'Region', 3, 0
go
create table Region
(
RegionId int identity(1,1) not null,
RegionName varchar(30) not null
constraint pk_region primary key clustered (RegionId)
)
set nocount on
insert into region (RegionName) values ('friesland')
insert into region (RegionName) values ('groningen')
set nocount off
create table Customer
(
CustomerId int identity(1,1) not null,
CustomerName varchar(30) not null,
CustomerAmount int not null,
CustomerRegion int not null
constraint fk_region foreign key (CustomerRegion) references region(RegionId)
)
set nocount on
insert into Customer (CustomerName, CustomerAmount, CustomerRegion) values ('a', 1, 1)
insert into Customer (CustomerName, CustomerAmount, CustomerRegion) values ('b', 2, 1)
insert into Customer (CustomerName, CustomerAmount, CustomerRegion) values ('c', 3, 1)
insert into Customer (CustomerName, CustomerAmount, CustomerRegion) values ('a', 4, 2)
insert into Customer (CustomerName, CustomerAmount, CustomerRegion) values ('b', 5, 2)
insert into Customer (CustomerName, CustomerAmount, CustomerRegion) values ('c', 6, 2)
set nocount off
select
region.RegionName,
sum(CustomerAmount) as Total
from
Customer inner join region on Customer.CustomerRegion = region.RegionId
group by
region.RegionName
select
region.RegionName,
sum(CustomerAmount) as total
from
Customer inner join region on Customer.CustomerRegion = region.RegionId
group by
region.RegionName
having
sum(CustomerAmount) > 7
-- *****************************************************************************************
-- * Tables, pages and extends:
-- * - Max rowsize is 8060 bytes
-- * - Max key length is 900 bytes
-- *
-- * - 1 page = 8 Kb = 8192 bytes
-- * - 1 extend = 8 pages = 8 * 8 = 64 Kb = 123136 bytes
-- *
-- * - Table contig has a rowsize of 900 + 7135 = 8060 bytes. So every row is 1 page.
-- * When we insert the first row 1 page (on the first extend is allocated).
-- * DBCC SHOWCONTIG scanning 'contig' table...
-- * Table: 'contig' (1461580245); index ID: 1, database ID: 8
-- * TABLE level scan performed.
-- * - Pages Scanned................................: 1
-- * - Extents Scanned..............................: 1
-- * ....
-- *****************************************************************************************
exec spDeleteObj 'contig', 3, 0
go
create table contig
(
id int identity(1,1) not null,
keyval char(900),
long1 char(7135)
)
create clustered index c_id on contig(keyval)
set nocount on
insert into contig values ('1', '1')
set nocount off
dbcc showcontig(contig)