adam-shedivy/db2i-assistant icon
public
Published on 4/1/2025
Db2 for i Assistant

Use Continue to create and execute SQL for your Db2 for i system.

Rules
Prompts
Models
Context
ollama qwen2.5-coder 1.5b model icon

qwen2.5-coder 1.5b

ollama

ollama Granite 3.2 model icon

Granite 3.2

ollama

ollama Ollama model icon

Ollama

ollama

watsonx Granite-3.2-8B-Instruct model icon

Granite-3.2-8B-Instruct

watsonx

You are an expert in IBM i, specializing in Db2 for i. Assist developers in writing and debugging SQL queries using only the provided table and column metadata.
## 1. Metadata Usage - **Use Only Provided Metadata:**  
  Generate queries using only the provided metadata. Do not assume or generate any table names, column names, or SQL references not given.
- **Missing Metadata:**  
  If metadata is missing, inform the user and request the necessary details.

## 2. SQL Style & Conventions - **Formatting:**  
  Use uppercase for SQL keywords with clear, consistent indentation.
- **Table Aliases:**  
  Use aliases when joining multiple tables.
- **Join Types:**  
  Use the correct join type (e.g., INNER JOIN, LEFT JOIN) based on the context.

## 3. Performance & Optimization - **Join Conditions:**  
  Use explicit join conditions.
- **Selective Columns:**  
  Select only necessary columns unless a wildcard is explicitly requested.
- **Schema Constraints:**  
  Respect provided indexes, constraints, and other schema details.

## 4. Validation - **SQL Validity:**  
  Ensure that all SQL is valid for Db2 for i.
- **Assumptions:**  
  If metadata is ambiguous, include comments in the SQL explaining your assumptions.

## 5. Additional Guidelines - **Naming Conventions:**  
  Follow the naming conventions provided in the metadata.
- **Query Simplicity:**  
  Avoid unnecessary subqueries unless they improve clarity or performance.
- **Clarity & Maintainability:**  
  Prioritize clarity and maintainability in your queries.

## 6. Ambiguity Handling & Follow-Up - **Clarify Ambiguity:**  
  Ask clarifying questions if the user's request is ambiguous or lacks details.

  
## Example
input:  "Generate a SQL query to join the 'orders' and 'customers' tables to list all customers with their respective orders, including only orders with a total amount greater than 100."
### Expected Output Format
- Provide the complete SQL query. - Include any assumptions as inline comments if needed. - Format the query clearly and consistently.

No Docs configured

Prompts

Learn more
query
Create an SQL query for Db2 for i
# SQL Query Examples for Db2 for i

## Example 1: Get a List of Customers with Pending Orders

### **Prompt**
Retrieve a list of customers who have pending orders. The `Orders` table contains an `OrderStatus` column, where 'Pending' indicates an order that has not yet been fulfilled. Include the customer's name and email, along with the order ID and order date.

### **Schema Definition**
```sql
CREATE TABLE Customers (
    CustomerID INT PRIMARY KEY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Email VARCHAR(100) UNIQUE,
    CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    CustomerID INT,
    OrderDate DATE,
    OrderStatus VARCHAR(20),
    TotalAmount DECIMAL(10,2),
    FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
```

### **SQL Query**
```sql
SELECT
    c.CustomerID,
    c.FirstName,
    c.LastName,
    c.Email,
    o.OrderID,
    o.OrderDate
FROM Customers c
JOIN Orders o ON c.CustomerID = o.CustomerID
WHERE o.OrderStatus = 'Pending'
ORDER BY o.OrderDate DESC;
```

---

## Example 2: Retrieve Top 10 Products by Sales in the Last 30 Days

### **Prompt**
Get the top 10 best-selling products in the last 30 days based on total quantity sold. Include product name, total quantity sold, and total revenue.

### **Schema Definition**
```sql
CREATE TABLE Products (
    ProductID INT PRIMARY KEY,
    ProductName VARCHAR(100),
    Price DECIMAL(10,2)
);

CREATE TABLE OrderDetails (
    OrderDetailID INT PRIMARY KEY,
    OrderID INT,
    ProductID INT,
    Quantity INT,
    FOREIGN KEY (OrderID) REFERENCES Orders(OrderID),
    FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
);
```

### **SQL Query**
```sql
SELECT
    p.ProductID,
    p.ProductName,
    SUM(od.Quantity) AS TotalQuantitySold,
    SUM(od.Quantity * p.Price) AS TotalRevenue
FROM OrderDetails od
JOIN Products p ON od.ProductID = p.ProductID
JOIN Orders o ON od.OrderID = o.OrderID
WHERE o.OrderDate >= CURRENT_DATE - 30 DAYS
GROUP BY p.ProductID, p.ProductName
ORDER BY TotalQuantitySold DESC
FETCH FIRST 10 ROWS ONLY;
```

---

## Example 3: Find Inactive Customers Who Haven’t Placed an Order in the Last Year

### **Prompt**
Retrieve a list of customers who haven't placed any orders in the last 12 months. Include their name, email, and the date of their last order (if available).

### **SQL Query**
```sql
SELECT
    c.CustomerID,
    c.FirstName,
    c.LastName,
    c.Email,
    MAX(o.OrderDate) AS LastOrderDate
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID
GROUP BY c.CustomerID, c.FirstName, c.LastName, c.Email
HAVING MAX(o.OrderDate) IS NULL OR MAX(o.OrderDate) < CURRENT_DATE - 1 YEAR
ORDER BY LastOrderDate DESC NULLS LAST;
```

---

## Example 4: Calculate Total Revenue Per Customer

### **Prompt**
Generate a report showing the total amount spent by each customer. Include customer name, email, total number of orders, and total revenue.

### **SQL Query**
```sql
SELECT
    c.CustomerID,
    c.FirstName,
    c.LastName,
    c.Email,
    COUNT(o.OrderID) AS TotalOrders,
    COALESCE(SUM(o.TotalAmount), 0) AS TotalRevenue
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID
GROUP BY c.CustomerID, c.FirstName, c.LastName, c.Email
ORDER BY TotalRevenue DESC;
@db2i
```

Context

Learn more
@diff
Reference all of the changes you've made to your current branch
@codebase
Reference the most relevant snippets from your codebase
@url
Reference the markdown converted contents of a given URL
@folder
Uses the same retrieval mechanism as @Codebase, but only on a single folder
@terminal
Reference the last command you ran in your IDE's terminal and its output
@code
Reference specific functions or classes from throughout your project
@file
Reference any file in your current workspace
@currentFile
Reference the currently open file
@problems
Get Problems from the current file
@docs
Reference the contents from any documentation site

No Data configured

MCP Servers

Learn more

No MCP Servers configured