Correlated subquery using Distinct : DISTINCT « Query « SQL Server / T-SQL Tutorial






7> CREATE TABLE Product(
8>     ProductID               int                NOT NULL,
9>     Name                    nvarchar(25)       NOT NULL,
10>     ProductNumber           nvarchar(25)               ,
11>     Color                   nvarchar(15)       NULL,
12>     StandardCost            money              NOT NULL,
13>     Size                    nvarchar(5)        NULL,
14>     Weight                  decimal(8, 2)      NULL,
15>     ProductLine             nchar(20)           NULL,
16>     SellStartDate           datetime           NOT NULL,
17>     SellEndDate             datetime           NULL
18> )
19> GO
1> insert into Product values(1,'Product A', '1','Red',123.123,'1',1,'ProductLine A','1999-03-22','2000-03-22');
2> GO

(1 rows affected)
1> insert into Product values(2,'Product B', '2','Yellow',234.234,'1',3,'ProductLine B','2000-03-22','2001-03-22');
2> GO

(1 rows affected)
1> insert into Product values(3,'Product C', '3','Pink',345.345,'1',3,'ProductLine V','2001-09-22','2006-02-22');
2> GO

(1 rows affected)
1> insert into Product values(4,'Product D', '4','White',456.456,'1',4,'ProductLine D','2002-08-22','2006-03-22');
2> GO

(1 rows affected)
1> insert into Product values(5,'Product E', '5','Black',567.567,'1',5,'ProductLine E','2003-01-22','2003-04-22');
2> GO

(1 rows affected)
1> insert into Product values(6,'Product F', '6','Blue',678.678,'1',6,'ProductLine W','2004-02-22','2005-05-22');
2> GO

(1 rows affected)
1> insert into Product values(7,'Product G', '7','Drak',789.789,'1',7,'ProductLine Q','2005-03-22','2006-03-22');
2> GO

(1 rows affected)
1> insert into Product values(8,'Product H', '8','Gray',234.123,'1',8,'ProductLine F','2006-04-22','2006-09-22');
2> GO

(1 rows affected)
1> insert into Product values(9,'Product I', '9','Red',543.123,'1',9,'ProductLine R','2007-05-22','2008-03-22');
2> GO

(1 rows affected)
1> insert into Product values(0,'Product J', '0','Gold',765.123,'1',0,'ProductLine J','2008-06-22','2009-03-22');
2> GO

(1 rows affected)
1>
2>
3>
4> CREATE TABLE SalesOrderDetail(
5>     SalesOrderID            int                NOT NULL,
6>     SalesOrderDetailID      int                NOT NULL,
7>     CarrierTrackingNumber   nvarchar(25)       NULL,
8>     OrderQty                smallint           NOT NULL,
9>     ProductID               int                NOT NULL,
10>     SpecialOfferID          int                NOT NULL,
11>     UnitPrice               money              NOT NULL,
12>     UnitPriceDiscount       money              NOT NULL DEFAULT (0.0),
13>     LineTotal               AS ISNULL([UnitPrice] * (1.0 - [UnitPriceDiscount]) * [OrderQty], 0.0)
14> );
15> GO
1>
2> insert into SalesOrderDetail values (1,1,'1',1,1,1,$1,$1);
3> GO

(1 rows affected)
1> insert into SalesOrderDetail values (2,2,'2',2,2,2,$2,$2);
2> GO

(1 rows affected)
1> insert into SalesOrderDetail values (3,3,'3',3,3,3,$3,$3);
2> GO

(1 rows affected)
1> insert into SalesOrderDetail values (4,4,'4',4,4,4,$4,$4);
2> GO

(1 rows affected)
1> insert into SalesOrderDetail values (5,5,'5',5,5,5,$5,$5);
2> GO

(1 rows affected)
1> insert into SalesOrderDetail values (6,6,'6',6,6,6,$6,$6);
2> GO

(1 rows affected)
1> insert into SalesOrderDetail values (7,7,'7',7,7,7,$7,$7);
2> GO

(1 rows affected)
1> insert into SalesOrderDetail values (8,8,'8',8,8,8,$8,$8);
2> GO

(1 rows affected)
1> insert into SalesOrderDetail values (9,9,'9',9,9,9,$9,$9);
2> GO

(1 rows affected)
1>
2>
3> SELECT ProductID
4>   , Name
5> FROM Product AS P
6> WHERE 1 =
7>   (SELECT DISTINCT SpecialOfferID
8>   FROM SalesOrderDetail As SD
9>   WHERE P.ProductID = SD.ProductID)
10> GO
ProductID   Name
----------- -------------------------
          1 Product A

(1 rows affected)
1>
2> drop table Product;
3> GO
1>
2>
3> drop table SalesOrderDetail;
4> GO








1.12.DISTINCT
1.12.1.A SELECT statement that eliminates duplicate rows
1.12.2.A summary query that uses the DISTINCT keyword
1.12.3.When the DISTINCT keyword is used, all duplicate values are eliminated before the function COUNT is applied.
1.12.4.Distinct with two columns
1.12.5.DISTINCT can be used only once in a SELECT list, and it must precede all column names in that list.
1.12.6.Correlated subquery using Distinct
1.12.7.Using SELECT DISTINCT or a GROUP BY statement in the inner query