---
title: "Data Shaping Example | Microsoft Docs"
ms.prod: sql
ms.prod_service: connectivity
ms.technology: connectivity
ms.custom: ""
ms.date: "01/19/2017"
ms.reviewer: ""
ms.topic: conceptual
helpviewer_keywords:
- "data shaping [ADO], about data shaping"
ms.assetid: 1bfdcad4-52e1-45bc-ad21-783657ef0a44
author: MightyPen
ms.author: genemi
---
# Data Shaping Example
The following data shaping command demonstrates how to build a hierarchical **Recordset** from the **Customers** and **Orders** tables in the Northwind database.
```
SHAPE {SELECT CustomerID, ContactName FROM Customers}
APPEND ({SELECT OrderID, OrderDate, CustomerID FROM Orders} AS chapOrders
RELATE customerID TO customerID)
```
When this command is used to open a **Recordset** object (as shown in [Visual Basic Example of Data Shaping](../../../ado/guide/data/visual-basic-example-of-data-shaping.md)), it creates a chapter (**chapOrders**) for each record returned from the **Customers** table. This chapter consists of a subset of the **Recordset** returned from the **Orders** table. The **chapOrders** chapter contains all the requested information about the orders placed by the given customer. In this example, the chapter consists of three columns: **OrderID**, **OrderDate**, and **CustomerID**.
The first two entries of the resultant shaped **Recordset** are as follows:
|CustomerID|ContactName|OrderID|OrderDate|CustomerID|
|----------------|-----------------|-------------|---------------|----------------|
|ALFKI|Maria Ander|10643
10692
10702
10835
10952
11011|1997-08-25
1997-10-03
1997-10-13
1998-01-15
1998-03-16
1998-04-09|ALFKI
ALFKI
ALFKI
ALFKI
ALFKI
ALFKI|
|ANATR|Ana Trujillo|10308
10625
10759
10926|1996-09-18
1997-08-08
1997-11-28
1998-03-04|ANATR
ANATR
ANATR
ANATR|
In a SHAPE command, APPEND is used to create a child **Recordset** related to the parent **Recordset** (as returned from the provider-specific command immediately after the SHAPE keyword that was discussed earlier) by the RELATE clause. The parent and child typically have at least one column in common: The value of the column in a row of the parent is the same as the value of the column in all rows of the child.
There is a second way to use SHAPE commands: namely, to generate a parent **Recordset** from a child **Recordset**. The records in the child **Recordset** are grouped, typically by using the BY clause, and one row is added to the parent **Recordset** for each resulting group in the child. If the BY clause is omitted, the child **Recordset** will form a single group and the parent **Recordset** will contain exactly one row. This is useful for computing "grand total" aggregates over the entire child **Recordset**.
The SHAPE command construct also enables you to programmatically create a shaped **Recordset**. You can then access the components of the **Recordset** programmatically or through an appropriate visual control. A shape command is issued like any other ADO command text. For more information, see [Shape Commands in General](../../../ado/guide/data/shape-commands-in-general.md).
Regardless of which way the parent **Recordset** is formed, it will contain a chapter column that is used to relate it to a child **Recordset**. If you want, the parent **Recordset** can also have columns that contain aggregates (SUM, MIN, MAX, and so on) over the child rows. Both the parent and the child **Recordset** can have columns that contain an expression on the row in the **Recordset**, as well as columns which are new and initially empty.
This section continues with the following topic.
- [Visual Basic Example of Data Shaping](../../../ado/guide/data/visual-basic-example-of-data-shaping.md)